提问者:小点点

获取正则表达式匹配后的文本


我是使用正则表达式的新手,我已经浏览了大量的教程,但没有找到一个适合我想做的事情,

我想搜索某个东西,但是返回它后面的所有内容,而不是搜索字符串本身

例如:“一些蹩脚的句子很棒”

null

回敬“那太棒了”

如有任何帮助,将不胜感激

这是我到目前为止的正则表达式

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

共3个答案

匿名用户

您可以使用注释中所要求的“只使用正则表达式”来完成此操作:

(?<=sentence).*

(?<=句子)是一个积极的后向断言。这将在字符串中的某个位置进行匹配,即在文本语句之后的位置,而不会使该文本本身成为匹配的一部分。因此,(?<=句子).*将匹配句子后的任何文本。

这是regex的一个非常好的特性。然而,在Java中,这只适用于有限长的子表达式,即。例如(?<=句子单词(foo){1,4})是合法的,但(?<=句子*)不是合法的。

匿名用户

null

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()(尝试查找字符串上的任何位置),而不使用m.matches()(由于前缀“some lame”而失败;在本例中,正则表达式需要为“.*senture(.*)”)

匿名用户

如果Matcher是用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());
}

输出:

太棒了