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


Regular expression to match numbers, but not HTML entities

是否有正则表达式可以查找文本中的所有数字序列('d+),但不能查找形成HTML实体的数字序列?看起来我应该同时使用"向前看"answers"向后看",但我不知道如何使用。

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

我试过

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

但它似乎太严格了,因为它对777;

这样的情况不返回匹配项

您可能可以将此regex与查找一起使用:

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

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

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

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

它很大,可读性很差,但它很管用。附言:我认为在处理之前解码/隐藏实体,然后把它们放回去会容易得多。