我试图从一个可能很大的文本中提取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
)
答案 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 );