PHP preg_match_all失败

时间:2014-01-04 00:56:00

标签: php regex preg-match-all

我试图从一个可能很大的文本中提取ID,我错过了什么?

preg_match_all('/(ID\s\d+)/', "ID 20380843, ID ​20675712", $matches);
print_r( $matches[0] );

只返回:

Array
(
    [0] => ID 20380843
)

而不是:

Array
(
    [0] => ID 20380843
    [1] => ID 20675712
)

3 个答案:

答案 0 :(得分:4)

您是否从代码中复制了该字符串?因为有一些鬼鬼祟祟的事情发生 当我将代码复制到我的编辑器时,它给了我这个字符串:

"ID 20380843, ID ?20675712"

正如你所看到的那样,第二个中有一个问号符号,因此你的表达失败了:)

答案 1 :(得分:2)

你的问题不是preg_replace_all,它是你的源文件。第二个ID中有一个隐形的unicode字符 - 您可以通过将其复制/粘贴到此Unicode Converter中看到,您会看到U + 200B在下方框中以各种形式显示:

  

Unicode U +十六进制表示法
  preg_match_all('/(ID \ s \ d +)/',“ID 20380843,ID U + 200B ^ 20675712”,$ match);

(强调我的)

这是Unicode Zero-Width Spaaace,显然没有包含在\s中,因为PHP的PREG定义了它。

答案 2 :(得分:0)

print_r(matches)代替print_r(matches[0]);

preg_match_all('/(ID\s\d+)/', "ID 20380843, ID ​20675712", $matches);
print_r( $matches );