如何根据输入正则表达式从字符串中提取子字符串

时间:2012-09-17 12:48:42

标签: java regex

给定字符串s和正则表达式r,我们如何从s中提取与正则表达式r匹配的子字符串?

5 个答案:

答案 0 :(得分:5)

首先阅读javadocs:

Pattern

Matcher

答案 1 :(得分:4)

建立一个这样的正则表达式:

  

。+?(r)。*

其中r是你的正则表达式。

Java代码

String s;// Your string
String r;// Your regexp
Pattern p = Pattern.compile(String.format(".+?(%s).*",r));
Matcher m = p.matcher(s);

if (m.find()) {
    System.out.println(m.group(1));
}

注意
我假设您的正则表达式只会在字符串s中匹配一次。

答案 2 :(得分:2)

您可以在ReEx文档中引用组: http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html#cg

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

答案 3 :(得分:2)

使用Matcher.findMatcher.group

Pattern p = Pattern.compile(r);
Matcher m = p.matcher(s);
if (m.find()) {
   String extracted = m.group();
}

答案 4 :(得分:0)

在您的模式中使用圆括号,并通过Matcher.find/Matcher.group获取。你将用数字来解决第n个括号。

Pattern PATTERN = Pattern.compile("(substring_here)");
String mystr = "substring_here";
String substring;

Matcher m = PATTERN.matcher(mystr); 
while (m.find()) {
    // group(1) will match the first bracket                        
substring = m.group(1);
}