我正在尝试从文本文件中过滤域,这些域始终位于每行的第一个位置。
文件看起来像:
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];
}
答案 0 :(得分:2)
使用m
修饰符允许多行模式:
preg_match_all('/^[^ ]+/m', $file, $matches);
^-- modifiers are here
修饰符列表:http://www.regular-expressions.info/modifiers.html
/ i使正则表达式匹配不区分大小写。
/ s启用“单行模式”。在此模式下,点匹配换行符。
/ m启用“多线模式”。在这种模式下,插入符号和美元符合前后 主题字符串中的换行符。
/ x启用“自由间隔模式”。在这种模式下,正则表达式令牌之间的空格被忽略,未转义的#开始注释。
答案 1 :(得分:1)
更新
: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
所以我想说@Frits van Campen的答案是最好的。