正则表达式,两个字符之间的所有内容(转义字符除外)

标签 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%”

“%mau*ris.%”

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

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

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

对于它选择的最后一个:

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

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

最佳答案

这个正则表达式将为您提供预期的结果:

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

查看此Regex101.com

说明

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

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

3 - 用 (1) 包围 (2) 将匹配由 % 包围且前面没有反斜杠的任何字符。

关于正则表达式,两个字符之间的所有内容(转义字符除外),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46863883/

相关文章:

java - 像ucwords一样使用正则表达式制作首字母大写

javascript - 在Javascript中找到单词中重复字母的最大数量

regex - 这个正则表达式应该做什么? ^[\d\D]{1,}$

javascript - [^\/:] | Regular Expression Improvement 的逆

regex - guid 的正则表达式

Python 正则表达式 - 扩展字符串

javascript - 除了字符 e、n、p 之外,是否有更简洁的正则表达式来匹配 a-z?

ios - 正则表达式获取两个 % 字符之间的字符串

C++11 正则表达式和字符串 u8 前缀

regex - 使用正则表达式提取单词...如果它存在