[英]Regex get all matches in one match
我正在寻找一个匹配所有单词的正则表达式,但只会给出一个匹配项。
我有的:
正则表达式: (.*\\={1})\\d+(\\D*)
输入: max. Money (EU)=600000 Euro
max. Money (EU)=600000 Euro
输出: Euro
这可以正常工作,但输入可能是这样的: max. Money (EU)=600000 Euro plus 20000 for one person
max. Money (EU)=600000 Euro plus 20000 for one person
。
在=
可以是任何东西之前,我唯一知道的是=
是固定的。 所以每个输入都有这个。
所以我正在寻找一个正则表达式,它将为我提供以下输出: Euro plus for one person
。
我试图使用像(\\D+)
这样的正则表达式,但是我将为此输入获得3个匹配项。 有人知道如何在一场比赛中使所有事件发生吗?
一个匹配操作不能匹配不连续的文本。
最简单的解决方法是在=
+ number之后捕获整个子字符串,然后使用preg_replace('~\\s*\\d+~', '', $m[1])
从匹配项中删除数字。
参见PHP演示 :
$re = '/=\d+\s*(.*)/';
$str = 'max. Money (EU)=600000 Euro plus 20000 for one person';
$res = '';
if (preg_match($re, $str, $m)) {
$res = preg_replace('~\s*\d+~', '', $m[1]);
}
echo $res; // => Euro plus for one person
由于您提到a =
不必跟着1+数字,因此您实际上可能只是将第一个=
处的字符串explode
,然后删除第二项中的数字:
$chunks = explode("=", $str, 2);
if (count($chunks) == 2) {
$res = preg_replace('~\s*\d+~', '', $chunks[1]);
}
请参阅此PHP演示 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.