假设您有以下字符串:
“7个苹果和13个橙子”
/(\d+).*?(apples)/i
上面的正则表达式将匹配7个苹果但是如果你将订单和数字交替为“45个橙子和9个苹果”。它将匹配第一个数字45而不是与我想要的苹果相对应的数字。
如果我按以下两个顺序编写句子,如何编写正则表达式以匹配并返回数字+苹果的匹配组:
即,我想匹配7个苹果,匹配组为7,苹果和52个苹果匹配组52和苹果。
答案 0 :(得分:3)
/(\d+).*?(apples)/i
.*?
即使它是一个懒人匹配,它也会匹配从数字到下一个apple
表示字符串
"13 oranges 52 apples"
从13
到字符串末尾的apple
匹配,因为.
匹配任何内容
请参阅说明链接:http://regex101.com/r/uL5eX0/2
由于分隔您的数字和苹果的符号是空格,因此您可以使用\s
字符代替.
作为
(\d+)\s(apples)
与http://regex101.com/r/uL5eX0/3
中的7
和52
相匹配
为了安全起见,你可以
(\d+)\s+(apples)
数字和苹果之间的任意数量的空格
字边界\b
也可用于额外的安全
答案 1 :(得分:1)
答案 2 :(得分:0)
答案 3 :(得分:0)
您只需添加\D*?
代替.*?
.
匹配中间数字但\D
不会。
(\d+)\D*?(apples)
\D*?
任何字符的非贪婪匹配,但不是数字零次或多次。
你的正则表达式有什么问题?
(\d+).*?(apples)
首先,正则表达式引擎会尝试匹配从左到右满足给定模式的字符。因此\d+
将匹配第一个数字,而.*?(apples)
会强制引擎匹配字符串apple
以外的所有字符。使用\D*?
代替.*?
强制引擎匹配任何字符,但不能匹配数字为零或更多的数字。