正则表达式,除了转义字符

时间:2017-10-21 13:45:13

标签: regex

我已经尝试过广泛搜索这个问题,并且存在类似的问题,但我还是无法解决这个问题。

我的问题是,除此之外,我还有这种形式的字符串:

%Aliquam hendrerit mollis pretium! Praesent id%
%molestie \*libero vel\%\% pulvinar? Sed%
\%% urna. \% Fusce% in *sapien %mau\*ris.%

我想选择两个%s之间的所有内容,忽略字符前面有\的情况。第一个是微不足道的,我已经能够做到第二个了。然而第三个我无法弄明白。为了澄清,从上面的文字我想选择以下内容:

“%Aliquam hendrerit mollis pretium!Praesent id%”

“%molestie * libero vel \%\%pulvinar?Sed%”

“%urna。\%Fusce%”

“%茂* RIS。%”

想要指出原始文字可以是没有换行符的一个长字符串的一部分,即每行不一定会出现在新行上。

到目前为止,我已经编写了以下正则表达式,似乎能够匹配除最后一个之外的所有内容:

(?<!\\)%([^%]*)(?!%\\)(?:%|(.*)%)(?<!\\%)

对于最后一个选择:

“%urna。\%Fusce%in * sapien%mau * ris。%”

哪个太多了。我真的不明白为什么会这样做,也许是因为我的正则表达式中的or-condition?非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

这个正则表达式会给你预期的结果:

/(?<!\\)(%.*?(?<!\\)%)/

请参阅此Regex101.com

<强>解释

1 - (?<!\\)%将匹配任何前面没有反斜杠的%字符。

2 - .*?将以懒惰方式匹配任何字符

3 - 围绕(2)和(1)将匹配由%前面加上反斜杠的任何字符。