【问题标题】:regex - exclude substring contains more than 2 "/"正则表达式 - 排除子字符串包含超过 2 个“/”
【发布时间】:2018-09-10 20:59:27
【问题描述】:

我有以下字符串的列表:

/fajwe/conv_1/routing/apwfe/afjwepfj
/fajwe/conv_2/routing/apwfe
/fajwe/conv_2/routing
/fajwe/conv_3/routing/apwfe/afjwepfj/awef
/fajwe/conv_4/routing/apwfe/afjwepfj/awef/0o09

我希望正则表达式仅匹配在单词 routing 之后不超过 1 个 / 的字符串。即/fajwe/conv_2/routing/apwfe/fajwe/conv_2/routing

目前我使用正则表达式^((?!rou\w+(\/\w+){2,}).)*$,但它不匹配任何内容。我如何编写一个正则表达式来排除包含超过 2 个/ 在单词 routing 之后的字符串?

我很想学习如何使用 Negative Lookbehind 实现这一目标。非常感谢!

【问题讨论】:

标签: regex regex-negation regex-lookarounds regex-group


【解决方案1】:

这样的?

^.*\/routing(\/[^\/]*){0,1}$

【讨论】:

  • 这两个匹配相同的东西^.*\/routing(?:\/[^\/]*)?$
  • 感谢您的帮助!但是我在 regex101 上对其进行了测试,但它不起作用。
  • 您应该启用多行标志m。 @spacegoing
  • @revo 感谢您的评论!有用!您能告诉我如何使用 Negative Lookbehind 来实现这一目标吗?
【解决方案2】:
routing(\/[^\/]*)?$

你来了

https://regex101.com/r/KjE8ed/1/

【讨论】:

    【解决方案3】:

    您的正则表达式与@revo 指出的多行标志m 相匹配。

    ^((?!rou\w+(\/\w+){2,}).)*$

    你也可以这样试试:

    ^\/fajwe\/conv_\d\/routing(?:\/[^\/]+)?$

    根据您的语言环境,您可以\/ escape the forward slash

    【讨论】:

    • 是的,原来我忘记了m 标志。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多