我试图从一个文本文件中筛选域,该文件总是出现在每行的第一个位置。
文件看起来像:
Domains Users
domain1.com User1
domain2.com User2
domain3.com User3
这就是我尝试的:
preg_match_all('/^[^ ]+/', $file, $matches);
它正在产生以下结果:
array(1) {
[0]=>
array(1) {
[0]=>
string(6) "Domains"
}
}
它在走第一条线,但在它之后停了下来。这很奇怪。
非常感谢在这里提供的任何帮助。
我的另一个问题是。什么更快,用preg_match或以下方法进行第一次接近。
$lines = preg_split('/'r'n|'r|'n/', $file);
foreach($lines as $line) {
$parts = explode(' ', $line, 2);
$domains[] = $parts[0];
}
使用m
修饰符允许多行模式:
preg_match_all('/^[^ ]+/m', $file, $matches);
^-- modifiers are here
修改器列表:http://www.regular-expressions.info/modifiers.html
/我使regex匹配不区分大小写。
/s使能";单线模式";。在此模式下,点与换行符匹配。
/m使能";多线模式";。在此模式下,插入符号和美元前后匹配主题字符串中的换行符。
/x使能";自由间隔模式";。在这种模式下,regex标记之间的空白将被忽略,并且一个未标记的#将启动一个注释。
更新:
:D对不起,我没有把你的问题读到底D.我认为爆炸更快。。。我正在测试。。。。(好问题!+1)
更新2:
我已经测试了这两个,你的爆炸企图和@Frits van Campen的答案…"我很惊讶:preg_match_all()的速度是的3.5倍
我使用了一个393472行的测试文件和Ubuntu12.04 php5.3.10,得到了:
爆炸
real 0m1.409s
user 0m1.284s
sys 0m0.124s
*preg_match_all*
real 0m0.461s
user 0m0.384s
sys 0m0.072s
所以我认为@FritsvanCampen的答案是最好的。