【发布时间】:2012-10-08 18:59:49
【问题描述】:
假设您有以下字符串:
id: 1 name: Joe age: 27 id: 2 name: Mary age:22
您想提取“age:”之后的每个标记,而不是字符串“age:”本身。
所以我希望我的 Matcher 的 group() 返回 27 和 22,而不是“年龄:27”和“年龄:22”
有没有办法在 Java Regex 语法中指定这条指令,这似乎与我在 Perl 中学习 Regex 基础的方式大不相同?
这是我的代码:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RegExTest
{
public static void main(String[] args)
{
Pattern namePtrn = Pattern.compile("age: *\\w*");
String data = "id: 1 name: Joe age:27 id: 2 name: Mary age:22";
Matcher nameMtchr = namePtrn.matcher(data);
while(nameMtchr.find())
{
String find = nameMtchr.group();
System.out.println ("\t" + find);
}
}
}
在 Perl 中,我可以使用 {} 来限制我想要提取的模式部分
while($text =~ m/(age:{\w+})/g)
{
my $find = $1;
if($find)
{
print "\nFIND = ".$find;
}
}
会返回
FIND = 27
FIND = 22
如果我把 {} 放在年龄上
while($text =~ m/({age:\w+})/g)
它会返回
FIND = age: 27
FIND = age:22
所以我正在寻找类似 Perl 的 {} 但在 Java 中的东西。
【问题讨论】:
-
标准捕获组(关键字)就是你所得到的;比较:
m/age:(\w+)/g.. -
(请阅读详细手册了解如何访问 捕获组 - 关键字!- 在 Java 中。就像 Perl 一样,有一种特殊的方法可以访问特定组:例如
$1与$&。) -
什么!? Perl 使用花括号来表示捕获组?
-
可能是因为你没有正确阅读超过一半的答案。