我试图拿出一个正则表达式来匹配某个基本路径。规则应该是匹配基本路径本身加上“/”或“.”以及路径的其余部分。例如,给定 /api/ping,以下内容应匹配/api/ping.json
/api/ping
/api/ping/xxx/sss.json
/api/ping.xml这应该不匹配/api/pingpong
/api/ping_pong
/api/ping-pong我尝试使用以下正则表达式:/api/ping[[\.|\/].*]?但它似乎没有抓住这个案例。/api/ping这是正则表达式风暴测试器的链接--更新:感谢答案,现在我有了这个版本,可以更好地反映我的推理:\/api\/ping(?:$|[.\/?]\S*)表达式要么在 ping(即该部分)之后结束,要么以 一个 继续,要么后跟任何非空格字符$./?这是正则表达式
2 回答
![?](http://img1.sycdn.imooc.com/5458463b0001358f02200220-100-100.jpg)
ibeautiful
TA贡献1993条经验 获得超5个赞
您可以使用此正则表达式,它使用交替来确保基本路径后跟或或行尾.
/
$
\/api\/ping(?=\.|\/|$)\S*
解释:
\/api\/ping
- 按字面意思匹配文本/api/ping
(?=\.|\/|$)
- 向前看,确保下面的内容是文字点或斜杠或行尾.
/
$
\S*
- 可选择跟随路径后面的任何非空格字符
在正则表达式中,字符集的使用是不正确的,您不需要转义点,并且在字符集中不需要交替,并且不能通过放置在字符类中来完成,并且由于字符类看起来嵌套,因此它不是必需的,也不是正确的做法。我猜你想让你的正则表达式像这样,/api/ping[[\.|\/].*]?
[]
.
|
|
\/api\/ping([.\/].*)?$
请注意,一旦您放入任何内容,那么它只被计为一个字符,允许字符集中包含的所有内容,因此它允许点或斜杠,并注意您需要转义为[]
.
/
/
\/
![?](http://img1.sycdn.imooc.com/5333a0490001f9ff02200220-100-100.jpg)
智慧大石
TA贡献1946条经验 获得超3个赞
您的模式使用一个字符类,该字符类将与列出的任何字符类匹配,也可以将其编写为 .[[./|]
它不匹配,因为字符类必须至少匹配 1 次,因为它不是可选的。/api/ping
您可以使用交替来匹配,然后断言字符串的结尾,或者通过重复 0 次或更多次匹配正斜杠,然后不是正斜杠,然后是点和 1+ 次,然后是点和扩展来匹配结构。/api/ping
|
/api/ping(?:(?:/[^/\s]+)*\.\S+|$)
这将匹配
/api/ping
按字面意思匹配(?:
非捕获组(?:/[^/\s]+)*
重复分组结构 0+ 次匹配,然后 1+ 次不匹配或空白字符/
/
\.\S+
匹配一个点和 1 倍以上的非空格字符|
或$
断言字符串的结尾)
关闭非捕获组
- 2 回答
- 0 关注
- 249 浏览
添加回答
举报
0/150
提交
取消