2017-10-21 56 views
0

我试过寻找这个广泛的,有类似的问题,但我还没有能够弄清楚这一点。正则表达式,两个字符之间的一切除了逃脱字符

我的问题是,我有,等等,这种形式的字符串:

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

我想选择两个%s的一切,忽略其中的字符由\ preceeded情况。第一个是微不足道的,我有办法做第二个。第三个,但我无法弄清楚。为了澄清,从上面的文字我要选择以下内容:

“!%Aliquam hendrerit油树的Pretium Praesent ID%”

“%molestie *自由人韦尔\%\%枕桑达%?”

“%乌仁娜。\%Fusce%”

“%茅* RIS%”

要指出的是,原文可以是一个很长的字符串的一部分,而不换行,即每一行不一定出现在上面新的线路。

这到目前为止,我写了下面的正则表达式,这似乎是能够匹配除了最后一个一切:

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

对于最后一个则选择:

“%乌仁娜\% Fusce%in * sapien%mau * ris。%“

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

+0

难道你不能在第二步中去掉转义字符吗?单曲/\\.// g'。而且我有点困惑,你是否想要忽略所有逃脱的字符,或只忽略百分号?您的问题表明预期结果与您的示例不同。 – knittl

+0

问题是,逃脱的字符是允许的,所以我不能把它们去掉。我会编辑主要帖子,希望能够澄清混乱,对此感到抱歉!编辑:我编辑主要职位正确的例子,我想能够选择。 – Scheme

回答

0

此正则表达式将得到预期的结果:

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

看到这个Regex101.com

说明

1 - (?<!\\)%不会被反斜杠任何%字符相匹配。

2 - .*?将以懒惰方式

3匹配任何字符 - 环境(2)与(1)将匹配由不是由反斜杠一个包围%的任何字符。

+0

确实如此,非常感谢! – Scheme

+0

不客气。增加了一些解释来帮助您了解过程。 –

相关问题