繁体   English   中英

正则表达式一场比赛中获得所有比赛

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM