我需要一个正则表达式(理想情况下是PHP兼容的),它找到所有以边界,等号(=)或冒号(:)开头的数字,但忽略百分比(数字后跟%符号),次,日期和ISO 8859-1符号实体编号(例如 
)。
一直使用以下内容,但每次都不起作用:
/(^:|\b|=|^&)([0-9]*[0-9.]*[0-9]+)(^%:;)?
答案 0 :(得分:1)
你的正则表达式严重受损:
我绝对建议阅读一个很好的正则表达式参考 - 很多年前,“man perlre”是我的来源,但我相信现在有更好的。
以下应该做你想要的,假设数字在边界上开始和结束,没有数千个分隔符并使用点作为小数分隔符,时间和日期是由“:”分隔的数字序列,“ - “或”/“,这些数字序列是时间和日期。如果这些假设不正确,应该很容易改进。
/\b(?<!&#|\d[:\/-])(\d+(?:\.\d+)?)(?!%|[:\/-]\d)\b/
说明:
注意我还假设您没有前面带有“&amp;#”的数字,但后面没有“;”。如果这个假设不成立则编码你的正则表达式是一个更难的问题。
测试:
$ pcretest
PCRE version 7.8 2008-09-05
re> /\b(?<!&#|\d[:\/-])(\d+(?:\.\d+)?)(?!%|[:\/-]\d)\b/g
data> a12
No match
data> a 12
0: 12
1: 12
data> 12-12
No match
data> 12:12
No match
data> 12 23
0: 12
1: 12
0: 23
1: 23
data> 
No match
data> :12
0: 12
1: 12
data> =12
0: 12
1: 12
data> 12/12
No match
data> 12%
No match