我是Regex的新手。
基本上我正在尝试创建一个正则表达式来评估我们系统的URL路径。但是,我们的系统中存在一个已知错误,导致URL路径变得非常混乱..
理想情况下,网址应为
/mobile/retail.*
由于该错误,该网址将在'/ mobile'和'/ retail'之间包含“其他内容”,如下所示
/mobile(/.*)?/retail
但具有挑战性的一点是,当有一些词我想在其他东西中忽略,即销售,搜索,批次,登录。所以案件看起来应该是这样的
所以我有一个这样的测试用例:
我有点坚持这个正则表达式,它不能像我想要的那样工作..
/mobile(/(?!sale|search|lot|login).*)?/retail.*
上面的正则表达式在以下条件下不起作用:
要排除的词语是严格的。例如,下面的列表应该通过:
非常感谢任何具有强大的正则表达式知识和任何反馈的人。
答案 0 :(得分:6)
首先尝试这个:
/mobile(?:/(?:(?!sale|search|lot|login)[^/])++)*/retail.*
如果编译失败(您未指定正则表达式风格),请尝试
/mobile(?:/(?:(?!sale|search|lot|login)[^/])+)*/retail.*
<强>解释强>
/mobile # Match "/mobile"
(?: # Match...
/ # a slash
(?: # followed by...
(?!sale|search|lot|login) # (only if these strings arent't present
[^/] # any character except slashes
)++ # Match at least one and don't backtrack
)* # Do this zero or more times
/retail # Then match "/retail"
.* # plus whatever follows
答案 1 :(得分:2)
一个正则表达式,它反复匹配斜杠之间的部分,其中这样的部分可能不是销售,搜索,批次或登录:
^/mobile(/(?!sale|search|lot|login)[^/]*)*/retail.*