如何匹配除一个之外的所有单词?

时间:2012-06-23 13:11:11

标签: java regex negative-lookahead

我正在尝试匹配以PRE开头并以PRE结尾的表达式。我正在寻找一个懒惰的匹配,即匹配表达式中的结尾PRE应该是在启动PRE之后找到的第一个。 我试图通过负向前瞻性正则表达式来实现这一点,在RegExr上进行测试:

正则表达式:

PRE(\w|\s)+(?!PRE)

要匹配的表达式:

PRE erp PRE edas PRE

上面的表达式与给定的正则表达式完全匹配,而我原本只希望匹配PRE erp PRE。 请建议一个正则表达式,该表达式与表达式开始和结束时保持匹配。

3 个答案:

答案 0 :(得分:5)

假设您的语言支持延迟匹配(如果它支持环视,我认为它也支持延迟量词):

PRE(.*?)PRE

由于这个答案可能有误,请在下次指定您的语言。 Regex针对不同的语言提供了不同的功能集。

答案 1 :(得分:2)

"(PRE)(.*?)(PRE)" 

这适用于我的(C#)代码,返回一个匹配,PRE erp PRE。

        var codeBlocks = Regex.Matches("PRE erp PRE edas PRE", "(PRE)(.*?)(PRE)", RegexOptions.IgnoreCase | RegexOptions.Singleline);
        MessageBox.Show("Matches found: " + codeBlocks.Count.ToString() + "\nMatch: " + codeBlocks[0].Value);

答案 2 :(得分:2)

这应该做的工作:

(?<=PRE)(.+?)(?=PRE)

http://regexr.com?31bc5