我使用正则表达式将字符串与模式匹配,之后我想在原始字符串中的某些位置获取字符串 例如我匹配:
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,国家="德国"。有没有办法在模式中留下一些标记来找到那些特定的字符串?
答案 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.替换是捕获的组。