Regex匹配具有两个字符的反向查找的字符



我想使用字符"&";,但是只有在不存在"零"的情况下才应该发生分裂\">

字符串:

/10/102-/ABC083.013/11/201201/20/83/30/463098194/32/7.7/40/0:20

Regex:

/*(?<!\)[^/]*/*(?<!\)[^/]*

预期结果:

/10/102-/ABC083.013
/11/201201
/20/83
/30/463098194
/32/7.7
/40/0:20

但是用我的正则表达式我得到:

/10/102-
/ABC083.013/11
/201201/20
/83/30
/463098194/32
/7.7/40
/0:20

在线正则表达式示例

问题在于第一组"/10/102-\/ABC083.013";,它不识别字符串"0"\/"到第一组。我不知道如何优化/更改我的正则表达式,使其正确识别第一组。

另一个选项是匹配2倍正斜杠,并且只有在前面有时才匹配/

(?:/(?:[^/]|(?<=\)/)+){2}

解释

  • (?:非捕获组
    • /匹配/
    • (?:非捕获组
      • [^/]匹配除/之外的任何字符
      • |
      • (?<=\)/匹配前面没有/
    • )+关闭组并重复1+次以匹配除/之外的至少1个字符
  • ){2}合组重复2次

Regex演示


或者一个稍微高效的展开版

(?:/[^\/]+(?:\.[^\/]*)*){2}

解释

  • (?:非捕获组
    • /[^\/]+匹配/,然后是除/之外的任何字符的1+倍
    • (?:非捕获组
      • \.[^\/]*匹配一个转义字符,后跟0倍以上除/之外的任何字符
    • )*关闭组并重复0+次(以防未出现转义字符(
  • ){2}合组重复2次

Regex演示

您可以使用

(?:/[^\/]+){2}(?:\/[^\/]+)?

请参阅regex演示详细信息

  • (?:/[^\/]+){2}-
    • /-/字符
    • [^\/]+-除/之外的一个或多个字符
  • (?:\/[^\/]+)?-可选出现:
    • \-一个字符
    • /-一个/字符
    • [^\/]+-除/之外的一个或多个字符

最新更新