一个组的正则表达式环顾四周不起作用
Regex lookaround for a group doesn't work
周六快乐,
我想知道 Whosebug 的用户是否可以给我关于一个特定正则表达式的线索..
(^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/ 来测试我的正则表达式。
你知道怎么做吗?
非常感谢。
正则表达式 (^visite\d+)(?!\D)
匹配字符串开头的 visite
,后跟一个或多个不应跟非数字的数字。
"issue"是引擎可以在\d+
模式中回溯,如果第三个数字后面没有跟一个非数字,它可以匹配2个数字。
最好的解决方法是检查实际需求,调整模式。
如果数字是字符串中的最后一个字符,您只需将前瞻替换为 $
锚点。
一个通用的解决方案是使子模式在正前瞻和反向引用中具有捕获组,并确保前瞻更改为类似 (?![a-zA-Z])
的内容 - 如果有字母则失败) :
/^visite(?=(\d+))(?![a-z])/i
或者如果单词边界应该跟在数字之后(即数字应该跟在字母、数字或下划线之后),请使用 \b
而不是向前看:
/^visite\d+\b/
周六快乐,
我想知道 Whosebug 的用户是否可以给我关于一个特定正则表达式的线索..
(^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/ 来测试我的正则表达式。
你知道怎么做吗? 非常感谢。
正则表达式 (^visite\d+)(?!\D)
匹配字符串开头的 visite
,后跟一个或多个不应跟非数字的数字。
"issue"是引擎可以在\d+
模式中回溯,如果第三个数字后面没有跟一个非数字,它可以匹配2个数字。
最好的解决方法是检查实际需求,调整模式。
如果数字是字符串中的最后一个字符,您只需将前瞻替换为 $
锚点。
一个通用的解决方案是使子模式在正前瞻和反向引用中具有捕获组,并确保前瞻更改为类似 (?![a-zA-Z])
的内容 - 如果有字母则失败) :
/^visite(?=(\d+))(?![a-z])/i
或者如果单词边界应该跟在数字之后(即数字应该跟在字母、数字或下划线之后),请使用 \b
而不是向前看:
/^visite\d+\b/