Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何匹配除一个单词以外的所有单词?_Java_Regex_Negative Lookahead - Fatal编程技术网

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

Java 如何匹配除一个单词以外的所有单词?,java,regex,negative-lookahead,Java,Regex,Negative Lookahead,我试图匹配以PRE开头和以PRE结尾的表达式。我正在寻找一个惰性匹配,即匹配表达式中的结束PRE应该是在开始PRE之后找到的第一个。 我试图通过一个负前瞻regex实现这一点,在RegExr上进行测试: 正则表达式: PRE(\w|\s)+(?!PRE) 要匹配的表达式: PRE erp PRE edas PRE 上面的表达式与给定的正则表达式完全匹配,而我只希望匹配PRE-erp-PRE。 请推荐一个惰性匹配以PRE开头和结尾的表达式的正则表达式。假设您的语言支持惰性匹配(如果它支持loo

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

正则表达式:

PRE(\w|\s)+(?!PRE)
要匹配的表达式:

PRE erp PRE edas PRE
上面的表达式与给定的正则表达式完全匹配,而我只希望匹配PRE-erp-PRE。
请推荐一个惰性匹配以PRE开头和结尾的表达式的正则表达式。

假设您的语言支持惰性匹配(如果它支持look-around,我想它也支持惰性量词):

由于此答案可能有误,请在下次指定您的语言。对于不同的语言,Regex有不同的特性集

"(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);

这应该可以做到:

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

(?这应该返回多少个匹配项?2?大小写是否重要?也就是说,
pre
pre
(例如)是否会被视为分隔符?这也是我想到的。您应该将ignorecase标志去掉
(?<=PRE)(.+?)(?=PRE)