java 字符单词匹配_java – 正则表达式匹配两个最接近的单词之间的文本

你可以帮我用正则表达式匹配两个最接近的单词之间的文本吗?

例如:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值