正则表达式匹配数字,但不匹配HTML实体

时间:2013-11-22 13:35:24

标签: php regex

是否有正则表达式可以在文本中找到所有数字序列(\d+),而不是形成HTML实体的数字序列?看起来我应该同时使用“向前看”和“向后看”,但我无法弄清楚如何。

例如,对于字符串✑ #555 foo 777;,我只想匹配555777,而不是10001

我试过

~(?<!(&#)|\d])\d+(?![\d|;])~

但它似乎过于严格,因为它不会像777;

那样返回匹配项

2 个答案:

答案 0 :(得分:0)

你可以使用这个正则表达式看看:

(?<!&#)\b\d+\b|(?:^|\b)\d+\b(?!;|$)

演示:http://www.rubular.com/r/IUGqDf7Nfg

答案 1 :(得分:0)

第二天早上我找到了解决方案。

(?<![(&#)\d])\d+|\d+(?!\d|;)

它非常大且可读性差,但它有效。 附:我认为在处理之前解码/隐藏实体然后将它们放回去会容易得多。