如何在正则表达式模式中留下一些标记?

时间:2014-11-14 22:31:05

标签: java regex

我使用正则表达式将字符串与模式匹配,之后我想在原始字符串中的某些位置获取字符串 例如我匹配:

your name is Jon and you have 15 years and you live in Germany

使用这种模式:

your\\s+name\\s+is\\s+\\w+\\s+and\\s+you\\s+have\\s+\\d+\\s+years\\s+and\\s+you\\s+live\\s+in\\s+\\w+

我想提取名字=" Jon" ,年龄= 15,国家="德国"。有没有办法在模式中留下一些标记来找到那些特定的字符串?

3 个答案:

答案 0 :(得分:1)

是的。 您可以使用括号中的“标记”单词封装,如下所示(术语为“capturegroup”):

your\s+name\s+is\s+(\w+)\s+and\s+you\s+have\s+(\d+)\s+years\s+and\s+you\s+live\s+in\s+(\w+)

使用各自语言的preg_match函数(对于PHP的“preg_match”),您将获得包含姓名,年龄和国家的3个匹配项。

我在这里为你创造了一个“小提琴”: http://regex101.com/r/tN5vH4/1

答案 1 :(得分:0)

订单对您有意义吗?

你可以看到这个正则表达式:

your name is (\S+)|you have (\d+) years|you live in (\S+)

this page上,输入文本以不同的顺序写入,并且匹配所有输入文本。这样做的方法是使用|竖线字符来表示"或",所以"你的名字是......"或者"你有...年"或者"你住在......"。

答案 2 :(得分:0)

使用捕获组“提取”每个目标:

String name = str.replaceAll(".*your name is (\\w+).*", "$1");
int age = Integer.parseInt(str.replaceAll(".*you have (\\d+) years.*", "$1"));
String city = str.replaceAll(".*you live in (\\w+).*", "$1");

此技术匹配整个输入,但将目标捕获为组1.替换是捕获的组。