2010-04-25 97 views
2

我想在非常长的文本中找到第一个匹配的字符串。我知道我可以使用preg_grep()并获取返回数组的第一个元素。但是如果我只需要第一场比赛(或者我知道事先只有一场比赛),那么这样做效率不高。任何建议?正则表达式在PHP中:找到第一个匹配的字符串

回答

3

preg_match()

preg_match()返回模式匹配的 次数。这将是 0次(不匹配)或1次 ,因为preg_match()会在第一次匹配后停止搜索 。 preg_match_all()会相反将 继续,直到它到达 主题的末尾。如果 发生错误,preg_match()返回FALSE。

+1

但我怎么能提取匹配的字符串呢?看来,通过调用的preg_match()我只知道,如果有匹配 – powerboy 2010-04-25 20:57:26

+2

'preg_match()'的第三个参数,如果给出的话,将会填充匹配(es)。 – 2010-04-25 21:02:32

+0

@Max - 确切地说,这就是为什么我链接到手册:-) – timdev 2010-04-25 21:04:19

0

这里是你如何能做到这一个例子:

$string = 'A01B1/00asdqwe'; 
$pattern = '~^[A-Z][0-9][0-9][A-Z][0-9]+~'; 

if (preg_match($pattern, $string, $match)) { 
    echo "We have matched: $match[0]\n"; 
} else { 
    echo "Not matched\n"; 
} 

你可以尝试print_r($match)检查阵列结构和测试您的正则表达式。对正则表达式

旁注:

  • 波浪号〜在正则表达式只是环绕 模式需要分隔符。
  • 插入符号^表示我们从字符串(可选)
  • 的加+开始 匹配表示,我们可以有下面的一个或更多 整数。 (这样A01B1A01B12A01B123还将 匹配。