代码之家  ›  专栏  ›  技术社区  ›  crimson589

只有当字符串出现一次并且是最后一次出现时,正则表达式才匹配

  •  0
  • crimson589  · 技术社区  · 4 年前

    希望这个标题有意义

    我当前的正则表达式是 .phone.*.telephoneNumber\/?$ 。我正在尝试匹配json路径,路径如下所示

    1. /phone/0/telephoneNumber-应匹配
    2. /phone/0/telephoneNumber/tephoneNumber-不应匹配

    使用我当前的正则表达式,这两者都匹配

    我需要它 .* 0或更多电话号码前的任何字符,因为后面可能有任何字符 /phone/.. 我正在努力寻找比赛的结局 telephoneNumber 只有当它后面没有另一个 /telephoneNumber

    0 回复  |  直到 4 年前
        1
  •  0
  •   Artyom Vancyan    4 年前

    0或更多电话号码前的任意字符。

    如果你的意思是字符数可以是0或更多,那么使用这个

    \/phone\/(?:\w+\/)?telephoneNumber\/?$
    

    如果你的意思是它应该是一个大于0的数字,那么使用这个

    \/phone\/\d+\/telephoneNumber\/?$
    
        2
  •  0
  •   user18098820 user18098820    4 年前

    如果 电话号码 是一个文字字符串,则可以使用负前瞻来确保它不介于两者之间 电话/ 和 /电话号码 。

    \/phone\/0\/((?!telephoneNumber).)*telephoneNumber$
    

    匹配 /phone/0/telephoneNumber
    不匹配 /phone/0/telephoneNumber/telephoneNumber

    警告 这个匹配 /phone/0/telephonenumber/telephoneNumber 除非我们使用选项 /i 不区分大小写。
    因此,完整的正则表达式是

    /\/phone\/0\/((?!telephoneNumber).)*telephoneNumber$/gmi
    

    看见 https://regex101.com/r/1WEF3U/1