我已经尝试过广泛搜索这个问题,并且存在类似的问题,但我还是无法解决这个问题。
我的问题是,除此之外,我还有这种形式的字符串:
%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?非常感谢任何帮助!
答案 0 :(得分:0)
这个正则表达式会给你预期的结果:
/(?<!\\)(%.*?(?<!\\)%)/
请参阅此Regex101.com
<强>解释强>
1 - (?<!\\)%
将匹配任何前面没有反斜杠的%字符。
2 - .*?
将以懒惰方式匹配任何字符
3 - 围绕(2)和(1)将匹配由%前面加上反斜杠的任何字符。