我有以下正则表达式,它将字符串与模式匹配:
(?i)(?<![^\\s\\p{Punct}]):回头看
(?![^\\s\\p{Punct}]):展望未来
下面是一个演示如何使用它的示例:
public static void main(String[] args) {
String patternStart = "(?i)(?<![^\\s\\p{Punct}])", patternEnd = "(?![^\\s\\p{Punct}])";
String text = "this is some paragraph";
System.out.println(Pattern.compile(patternStart + Pattern.quote("some paragraph") + patternEnd).matcher(text).find());
}返回true,这是预期的结果。但是,由于regex使用双重否定(即负面展望/后面和^),我认为删除这两个负数应该返回相同的结果。所以,我尝试了以下几点:
String patternStart = "(?i)(?<=[\\s\\p{Punct}])", patternEnd = "(?=[\\s\\p{Punct}])";然而,它似乎并没有像预期的那样起作用。我甚至尝试在(方括号的)末尾添加^和/或$,以匹配字符串的开头/结尾,但没有成功。
是否有可能将这些regexes转换为积极的查找?
发布于 2017-03-20 17:39:54
是的,这是可能的,但是它比你所拥有的效率要低,因为在积极的环境中,你需要使用交替。
String patternStart = "(?i)(?<=^|[\\s\\p{Punct}])", patternEnd = "(?=[\\s\\p{Punct}]|$)";
^^ ^^ (?<=^|[\\s\\p{Punct}])查找需要出现字符串开始(^)或| (空格或标点符号([\\s\\p{Punct}]) )。正向(?=[\\s\\p{Punct}]|$)需要空格或标点符号,或者字符串的末尾。
如果您只是将^或$添加到字符类(如[\\s\\p{Punct}^]和[\\s\\p{Punct}$] )中,它们将被解析为文字插入符号和美元符号。
https://stackoverflow.com/questions/42910338
复制相似问题