如何使用preg_match筛选第一个引用


How to filter the first occurrence with preg_match

我试图从一个文本文件中筛选域,该文件总是出现在每行的第一个位置。

文件看起来像:

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的答案是最好的。