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

2022-08-31 09:55:50

我是使用正则表达式的新手,我一直在学习一系列教程,但我还没有找到一个适用于我想做的事情,

我想搜索某些内容,但返回其后面的所有内容,但不返回搜索字符串本身

例如,“一些蹩脚的句子真棒"

搜索“句子”"

返回“真棒"

任何帮助将不胜感激

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

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

答案 1

您可以使用“仅正则表达式”来执行此操作,就像您在注释中要求的那样:

(?<=sentence).*

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

这是正则表达式的一个很好的功能。但是,在Java中,这仅适用于有限长度的子表达式,即 是合法的,但不是。(?<=sentence|word|(foo){1,4})(?<=sentence\s*)


答案 2

您的正则表达式是正确的。要在括号中检索组的内容,请调用:"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"
}

请注意,在这种情况下,使用(尝试在字符串上查找任何位置)而不是(由于前缀“some lame”而失败);在这种情况下,正则表达式需要是m.find()m.matches()".*sentence(.*)")