为了账号安全,请及时绑定邮箱和手机立即绑定

用于匹配基本路径的正则表达式

用于匹配基本路径的正则表达式

C#
月关宝盒 2022-08-20 16:52:06
我试图拿出一个正则表达式来匹配某个基本路径。规则应该是匹配基本路径本身加上“/”或“.”以及路径的其余部分。例如,给定 /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 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

您可以使用此正则表达式,它使用交替来确保基本路径后跟或或行尾./$

\/api\/ping(?=\.|\/|$)\S*

解释:

  • \/api\/ping- 按字面意思匹配文本/api/ping

  • (?=\.|\/|$)- 向前看,确保下面的内容是文字点或斜杠或行尾./$

  • \S*- 可选择跟随路径后面的任何非空格字符

演示

在正则表达式中,字符集的使用是不正确的,您不需要转义点,并且在字符集中不需要交替,并且不能通过放置在字符类中来完成,并且由于字符类看起来嵌套,因此它不是必需的,也不是正确的做法。我猜你想让你的正则表达式像这样,/api/ping[[\.|\/].*]?[].||

\/api\/ping([.\/].*)?$

使用更正的正则表达式进行演示

请注意,一旦您放入任何内容,那么它只被计为一个字符,允许字符集中包含的所有内容,因此它允许点或斜杠,并注意您需要转义为[].//\/


查看完整回答
反对 回复 2022-08-20
?
智慧大石

TA贡献1946条经验 获得超3个赞

您的模式使用一个字符类,该字符类将与列出的任何字符类匹配,也可以将其编写为 .[[./|]

它不匹配,因为字符类必须至少匹配 1 次,因为它不是可选的。/api/ping

您可以使用交替来匹配,然后断言字符串的结尾,或者通过重复 0 次或更多次匹配正斜杠,然后不是正斜杠,然后是点和 1+ 次,然后是点和扩展来匹配结构。/api/ping|

/api/ping(?:(?:/[^/\s]+)*\.\S+|$)

这将匹配

  • /api/ping按字面意思匹配

  • (?:非捕获组

    • (?:/[^/\s]+)*重复分组结构 0+ 次匹配,然后 1+ 次不匹配或空白字符//

    • \.\S+匹配一个点和 1 倍以上的非空格字符

    • |

    • $断言字符串的结尾

  • )关闭非捕获组

查看正则表达式演示|C# 演示


查看完整回答
反对 回复 2022-08-20
  • 2 回答
  • 0 关注
  • 249 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信