获取正则expression式匹配后的文本
我是使用正则expression式的新手,我一直在经历一系列的教程,但是我还没有find适用于我想做的事情的东西,
我想search的东西,但返回一切后面,但没有searchstring本身
例如“ 一些令人敬畏的蹩脚的句子 ”
search“ 句子 ”
回报“ 真棒 ”
任何帮助将非常感激
这是我的正则expression式
sentence(.*)
但它返回: 真棒的句子
Pattern pattern = Pattern.compile("sentence(.*)"); Matcher matcher = pattern.matcher("some lame sentence that is awesome"); boolean found = false; while (matcher.find()) { System.out.println("I found the text: " + matcher.group().toString()); found = true; } if (!found) { System.out.println("I didn't find the text"); }
你可以用“只是正则expression式”来做到这一点,正如你在评论中所要求的那样:
(?<=sentence).*
(?<=sentence)
是一个积极的向后看断言 。 这匹配在string中的某个位置,即在文本sentence
之后的位置,而不使该文本本身成为匹配的一部分。 因此, (?<=sentence).*
将匹配sentence
后的任何文本。
这是正则expression式的一个很好的特性。 然而,在Java中,这只适用于有限长度的子expression式,即(?<=sentence|word|(foo){1,4})
是合法的,但是(?<=sentence\s*)
不是。
你的正则expression式"sentence(.*)"
是正确的。 要在圆括号中检索组的内容,可以调用:
Pattern p = Pattern.compile( "sentence(.*)" ); Matcher m = p.matcher( "some lame sentence that is awesome" ); if ( m.find() ) { String s = m.group(1); // " that is awesome" }
注意在这种情况下使用m.find()
(试图findstring的任何地方)而不是m.matches()
(由于前缀“有些跛脚”而失败;在这种情况下,正则expression式需要是".*sentence(.*)"
)
如果匹配器是用str
初始化的,比赛结束后你可以得到与之匹配的部分
str.substring(matcher.end())
示例代码:
final String str = "Some lame sentence that is awesome"; final Matcher matcher = Pattern.compile("sentence").matcher(str); if(matcher.find()){ System.out.println(str.substring(matcher.end()).trim()); }
输出:
太棒了
您需要使用匹配器的组(int) – 组(0)是整个匹配,而组(1)是您标记的第一个组。 在你指定的例子中,组(1)是在“ 句子 ”之后。
你只需要把“group(1)”而不是“group()”放在下面的行中,并且返回将是你期望的那个:
System.out.println("I found the text: " + matcher.group(**1**).toString());