你可以帮我用正则表达式匹配两个最接近的单词之间的文本吗?
例如:
text KEYWORD1 text KEYWORD1 text KEYWORD2 text KEYWORD2
结果必须是:
KEYWORD1 text KEYWORD2
这不起作用,这是可以预测的:
(KEYWORD1).*(KEYWORD2)
用regexp甚至可以做到这一点吗?如果是这样,它将如何与有限状态机一起使用?
Java regexp语法是最好的.先感谢您!
解决方法:
更新:
String val="text KEYWORD1 text KEYWORD1 text KEYWORD2 text KEYWORD2";
String REGEX="KEYWORD1((.(?!KEYWORD1))+?)KEYWORD2";
Pattern pattern = Pattern.compile(REGEX);
Matcher matcher = pattern.matcher(val);
if(matcher.find()){
System.out.println(matcher.group());
}
检查此图以查看其工作原理:
第一个捕获组((.(?!KEYWORD1))?)
第二个捕获组(.(?!KEYWORD1))?
量词(?):在一次和无限次之间,尽可能少,根据需要扩展[懒惰]
Note: A repeated capturing group will only capture the last iteration.
Put a capturing group around the repeated group to capture all
iterations or use a non-capturing group instead if you’re not
interested in the data
.匹配任何字符(换行符除外)
(?!KEYWORD1)否定前瞻 – 断言无法匹配下面的正则表达式
KEYWORD1字面匹配字符KEYWORD1(区分大小写)
KEYWORD2字面匹配字符KEYWORD2(区分大小写)
标签:java,regex
来源: https://codeday.me/bug/20190612/1226612.html