我正在搜索一个匹配所有单词的正则表达式,但只会给出一个匹配项。
我有:
正则表达式:(.*\={1})\d+(\D*)
输入:最大。金钱(EU)=600000欧元
输出:欧元
这工作正常,但输入可能是这样的:max。金钱(EU)=600000欧元加上一人20000
。
在 =
可以是任何东西之前,我唯一知道的是 =
是固定的。所以每个输入都有这个。
因此,我正在寻找一个正则表达式,该正则表达式将为我提供此输入的输出:Euro plus for one person
。
我尝试使用像 (\D+)
这样的正则表达式,但我会为此输入获得 3 个匹配项。有人知道如何在一场比赛中获得所有出现的情况吗?
最佳答案
无法通过 1 次匹配操作来匹配不连续的文本。
最简单的解决方法是捕获 =
+ number 之后的整个子字符串,然后使用 preg_replace('~\s*\d+~', '', $m[1])
.
请参阅PHP demo :
$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
既然您提到 =
后面不必跟 1+ 位数字,您实际上可能只是在第一个 =
处分解
字符串code> 然后删除第二项中的数字:
$chunks = explode("=", $str, 2);
if (count($chunks) == 2) {
$res = preg_replace('~\s*\d+~', '', $chunks[1]);
}
参见this PHP demo .
关于php - 正则表达式在一场比赛中获取所有比赛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42084795/