【发布时间】:2018-07-10 16:41:55
【问题描述】:
当我遇到这个问题时,我正在浏览关于 SO 的正则表达式标记的问题,
需要一个 url 的正则表达式,该 url 以 domain.com/advertorials/ 开头
正则表达式应匹配以下场景,
- domain.com/advertorials
- domain.com/advertorials?test=true
- domain.com/advertorials/
domain.com/advertorials/?test=true
但不是这个,
domain.com/advertorials/version1?test=true
我想出了这个正则表达式advertorials\/?(?:(?!version)(.*))
这应该有效,但不适用于最后一种情况。查看 regex101.com 中的调试器, 我看到在匹配 's/' 之后,它逐个字符地匹配 'version' 单词并最终匹配,但由于这是负前瞻,因此条件失败。这是我在失败后回溯到's/'中的'/'之前而不是's/'之后的部分。
这是它应该如何工作的?谁能帮我理解? (这里是演示链接:https://regex101.com/r/ww3HR8/1)。
谢谢,
注意:人们已经针对这个问题给出了解决方案,我只是想知道为什么我的正则表达式会失败。
【问题讨论】: