周六快乐,
我想知道Stackoverflow的用户是否能给我一个特定正则表达式的线索..
(^visite\d+)(?!\D)
上述正则表达式效果很好..
它说:
visite12345 --> is a good anwser (the string does match)
visite1a --> is not a good anwser (the string doesn't match)
但是:
visite12345a --> It doesn't work.
确实,输出是visite1234,而我想得到与visite1a相同的答案(字符串不匹配)......
我使用http://regexr.com/来测试我的正则表达式。
你知道怎么做吗? 非常感谢你。
答案 0 :(得分:1)
正则表达式(^visite\d+)(?!\D)
在字符串的开头匹配visite
,后跟一个或多个不应跟随非数字的数字。
"问题"是引擎可以在\d+
模式内回溯,如果第三个没有跟随非数字,它可以匹配2位数。
解决问题的最佳方法是检查实际要求并调整模式。
如果数字是字符串中的最后一个字符,您应该用$
锚替换前瞻。
对此的通用解决方案是使子模式具有捕获组的原子,在正向前导和反向引用内,并确保前瞻更改为(?![a-zA-Z])
- 如果有字母则失败):< / p>
/^visite(?=(\d+))\1(?![a-z])/i
请参阅regex demo
或者,如果单词边界应该跟在数字后面(即数字后跟字母,数字或下划线),请使用\b
代替前瞻:
/^visite\d+\b/
请参阅another demo