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}
解释
非捕获组(?:
匹配\/[^\\/]+
,后跟除/
和\
之外的任何字符的1+倍/
非捕获组(?:
匹配转义字符,后跟0+倍除\.[^\\/]*
和\
以外的任何字符/
关闭组并重复0多次(如果没有出现转义字符))*
关闭组并重复2次){2}
这很好用。对于{2},我也尝试过,但显然是错误的。多谢各位@Maisen1886
(?:\/[^\\\/]+){2}
等于\/[^\\\/]+\/[^\\\/]+
。应使用非捕获组(如果支持)和(?:…)
定义模式序列的重复。
(?:\/(?:[^\/]|(?<=\\)\/)+){2}
(?:\/[^\\\/]+(?:\\.[^\\\/]*)*){2}