给定一个字符串s
和一个正则表达式r
,我们如何从中提取s
与正则表达式匹配的子字符串r
?
问问题
171 次
5 回答
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
。
于 2012-09-17T12:53:31.697 回答
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);
}
}
于 2012-09-17T12:53:49.633 回答
2
Pattern p = Pattern.compile(r);
Matcher m = p.matcher(s);
if (m.find()) {
String extracted = m.group();
}
于 2012-09-17T12:55:35.923 回答
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);
}
于 2012-09-17T12:53:21.100 回答