Regex 具有两个字符的负向后查找的正则表达式匹配字符

Regex 具有两个字符的负向后查找的正则表达式匹配字符,regex,negative-lookbehind,Regex,Negative Lookbehind,我想使用“/”字符拆分字符串,但拆分只应在前面没有“\”时进行 字符串: /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 问题出现在第一组“/1

我想使用“/”字符拆分字符串,但拆分只应在前面没有“\”时进行

字符串:

/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”上,它无法识别第一组的字符串“\/”。我不知道如何优化/更改我的正则表达式,以便它正确识别第一个组。

您可以使用

(?:\/[^\\/]+){2}(?:\\\/[^\\/]+)?
看。详情:

  • (?:\/[^\\/]+){2}
    -出现两次
    • \/
      -a
      /
      字符
    • [^\\/]+
      -一个或多个字符,而不是
      /
      \
  • (?:\\\/[^\\/]+)?
    -可选出现:
    • \\
      -a
      \
      字符
    • \/
      -a
      /
      字符
    • [^\\/]+
      -一个或多个字符,而不是
      /
      \

另一个选项是匹配正斜杠的2倍,当前面有
\

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

  • (?:
    非捕获组
    • \/[^\\/]+
      匹配
      /
      ,后跟除
      \
      /
      之外的任何字符的1+倍
    • (?:
      非捕获组
      • \.[^\\/]*
        匹配转义字符,后跟0+倍除
        \
        /
        以外的任何字符
    • )*
      关闭组并重复0多次(如果没有出现转义字符)
  • ){2}
    关闭组并重复2次

这很好用。对于{2},我也尝试过,但显然是错误的。多谢各位@Maisen1886
(?:\/[^\\\/]+){2}
等于
\/[^\\\/]+\/[^\\\/]+
。应使用非捕获组(如果支持)和
(?:…)
定义模式序列的重复。
(?:\/(?:[^\/]|(?<=\\)\/)+){2}
(?:\/[^\\\/]+(?:\\.[^\\\/]*)*){2}