使用正则表达式查找并返回字符串

4

如果我有一个正则表达式,我该如何返回它找到的子字符串呢?我确定我肯定错过了一些明显的东西,但是我找到了各种方法来确认该子字符串是否包含在我要查找的字符串中,或者用其他东西替换它,但是没有找到如何返回我找到的内容。


1
请给我们展示一些实际的例子,以代表您的意思。否则,您可能会得到意想不到的答案,这可能不是您想要的。 - Lion
3个回答

7
Matcher matcher = Pattern.compile("a+").matcher("bbbbaaaaabbbb");
if(matcher.find())
     System.out.println(matcher.group(0)); //aaaaa

如果您需要特定的部分
Matcher matcher = Pattern.compile("(a+)b*(c+)").matcher("bbbbaaaaabbbbccccbbb");
if(matcher.find()){
   System.out.println(matcher.group(1)); //aaaaa
   System.out.println(matcher.group(2)); //cccc
   System.out.println(matcher.group(0)); //aaaaabbbbcccc 
}

第0组是完整的模式,其他组在正则表达式 (a+)b*(c+) 中用括号分隔开,并且可以单独获取。


零组表示整个模式,因此表达式 m.group(0) 等同于 m.group() - Mir-Ismaili

2
CharSequence inputStr = "abbabcd";

String patternStr = "(a(b*))+(c*)";

// Compile and use regular expression
Pattern pattern = Pattern.compile(patternStr);
Matcher matcher = pattern.matcher(inputStr);
boolean matchFound = matcher.find();

if (matchFound)
{
    // Get all groups for this match
    for (int i=0; i<=matcher.groupCount(); i++) 
    {
        String groupStr = matcher.group(i);
    }
}

CharSequence是一种可读的char值序列。该接口提供了对许多不同类型的char序列的统一只读访问。char值表示BMP(基本多文种平面)中的字符或代理项。有关详细信息,请参阅Unicode字符表示。

CharSequence是一个接口。

public interface CharSequence

请参考捕获组

请参考使用参数的组示例

请参考Java 正则表达式教程


1
import java.util.regex.*;

class Reg
{
  public static void main(String [] args) 
  {
    Pattern p = Pattern.compile("ab");
    Matcher m = p.matcher("abcabd");
    System.out.println("Pattern is " + m.pattern());
    while(m.find())
    {
      System.out.println(m.start() + " " + m.group()); 
      // m.start() will give the index and m.group() will give the substring
    }  
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接