我正在匹配一个正则表达式
abc.*def.*pqr.*xyz
现在字符串 abc123def456pqr789xyz
将匹配该模式。
我想用匹配器找到字符串 123、456、789。
最简单的方法是什么?
最佳答案
将正则表达式更改为 abc(.*)def(.*)pqr(.*)xyz
括号将自动绑定(bind)到
- 变量
$1
到$3
如果 你用String.replaceAll()或 - Matcher.group(n)如果你使用 Matcher.find()
请参阅 Pattern class 的文档, 特别是 Groups and Capturing ,了解更多信息。
示例代码:
final String needle = "abc(.*)def(.*)pqr(.*)xyz";
final String hayStack = "abcXdefYpqrZxyz";
// Use $ variables in String.replaceAll()
System.out.println(hayStack.replaceAll(needle, "_$1_$2_$3_"));
// Output: _X_Y_Z_
// Use Matcher groups:
final Matcher matcher = Pattern.compile(needle).matcher(hayStack);
while(matcher.find()){
System.out.println(
"A: " + matcher.group(1) +
", B: " + matcher.group(2) +
", C: " + matcher.group(3)
);
}
// Output: A: X, B: Y, C: Z
关于Java正则表达式得到不匹配的部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3751914/