请考虑您有以下字符串:
id: 1 name: Joe age: 27 id: 2 name: Mary age:22
Run Code Online (Sandbox Code Playgroud)
并且你想在"年龄:"之后提取每个标记,但不是字符串"age:"本身.
所以我希望我Matcher的group()回归27和22而不是"年龄:27"和"年龄:22"
有没有办法在Java Regex语法中指定这个指令,这看起来与Perl中的指令完全不同,在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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在Perl中,我可以使用{}来限制我想要提取的模式部分
while($text =~ m/(age:{\w+})/g)
{
my $find = $1;
if($find)
{
print "\nFIND = ".$find;
}
}
Run Code Online (Sandbox Code Playgroud)
会回来的
FIND = 27
FIND = 22
Run Code Online (Sandbox Code Playgroud)
如果我把{}和年龄相提并论
while($text =~ m/({age:\w+})/g)
Run Code Online (Sandbox Code Playgroud)
它会回来
FIND = age: 27
FIND = age:22
Run Code Online (Sandbox Code Playgroud)
所以我正在寻找像Perl的{}这样的东西,但是在Java中.
如果你使用Matcher.group(1)而不是Matcher.group()你可以捕获减去'age:'的模式:
String data = "id: 1 name: Joe age:27 id: 2 name: Mary age:22";
Pattern namePtrn = Pattern.compile("age:(\\w+)");
Matcher nameMtchr = namePtrn.matcher(data);
while (nameMtchr.find()) {
String find = nameMtchr.group(1);
System.out.println("\t" + find);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8125 次 |
| 最近记录: |