我需要在文本中匹配不正确的反斜杠。以下文字是一个例子:
\.br\ Random Words \.br\\1 Testing\.br\2\ Check
所以\ .br \是正确的,但\ 1和2 \中的反斜杠不是。
所以我尝试使用正则表达式来匹配任何未跟随 .br 的\但是失败,因为它会匹配 \。br \ 中的结束\
然后我在stackoverflow上查找了一些类似的问题,其中大多数都说明了一系列的前瞻可以用作'和'运算符,所以我尝试了这个:
/(?!\\\.br)\\(?!\.br\\)/
我尝试做的是匹配任何既不是\ .br之前也没有后跟.br \的反斜杠,但它似乎不起作用。
任何帮助将不胜感激。我希望我没有错过这个问题的任何细节。
谢谢,
西特
答案 0 :(得分:6)
关闭。 (?!PAT)
表示“未跟PAT
”。您希望“前面没有PAT
”。
(?<!\\\.br)\\(?!\.br\\)
以下内容会更快一些:
\\(?<!\\\.br\\)(?!\.br\\)
答案 1 :(得分:2)
我会使用perl,并使用\G
锚点和\K
元字符(以及一些原子/占有部分来提高效率):
\G(?>\\\.br\\|[^\\]++)*+\K\\
它应该比使用lookarounds更快,因为没有重复的匹配(多次遍历相同的子字符串,这就是看起来像什么)。
匹配分别以24步和21步完成(而不是使用36和22步的外观,加上4个失败的步骤)。
答案 2 :(得分:0)
(?:\\(?!\.br)\\)+(\S+)
上面的正则表达式将捕获不是.br。
的反斜杠内的那些字符 *请注意,\.br\2\
中的数字2不会被捕获,因为.br \已正确输入。