我需要区分以下字符串
\\server\path1\path2
\\server\path1
第一次出现的总是两个反斜杠\\
,但它可能不是一行的开始。之前可能有空格或其他文本。
在第一个字符串中,至少应有4个反斜杠
\\
服务器\
路径1 \
路径2 ... more backslashes
在第二个字符串中,只能有3个反斜杠
\\
服务器\
路径1
我需要2个正则表达式。
对于字符串1,我想出了
[\\\\]{1}[a-zA-Z_\-0-9]+[\\]{1}[a-zA-Z_\-0-9]+[\\]
说明
[\\\\]{1} one occurrence of \\
[a-zA-Z_\-0-9]+ any number of one or more alphanumeric with dash (-)
[\\]{1} one occurrence of \
[a-zA-Z_\-0-9]+ any number of one or more alphanumeric with dash (-)
[\\] one occurrence of \
对于字符串2,如何将反斜杠的匹配数限制为仅3个。
答案 0 :(得分:0)
您可以使用
(?<!\\)\\(?:\\[^\\]+){3}(?!\S)
(?<!\\)\\(?:\\[^\\]+){2}(?!\S)
请参见regex #1 demo和regex #2 demo。
详细信息
(?<!\\)
-如果当前位置的左侧紧跟着\
,则反向查找将使匹配失败\\
-一个\
字符(?:\\[^\\]+){3}
-出现\
个char序列的三个(或第二个正则表达式中为2个),然后出现\
以外的1个或多个char (?!\S)
-如果在当前位置的右边不存在非空格字符(即必须有空格或字符串的末尾),则负向超前将导致匹配失败。