Php 正则表达式在一个匹配中获得所有匹配
我正在搜索一个正则表达式,它匹配所有单词,但只提供一个匹配项 我所拥有的:Php 正则表达式在一个匹配中获得所有匹配,php,regex,Php,Regex,我正在搜索一个正则表达式,它匹配所有单词,但只提供一个匹配项 我所拥有的: 正则表达式:(.*\={1})\d+(\d*) 输入:max.Money(欧盟)=600000欧元 输出:Euro 这很好,但输入可能是这样的:max.Money(EU)=600000欧元加上一个人20000欧元 在=可以成为任何东西之前,我只知道=是固定的。所以每个输入都有这个 因此,我正在搜索一个正则表达式,它将为我提供这个输入和输出:Euro plus for one person 我尝试使用类似于(\D+)的
正则表达式:
(.*\={1})\d+(\d*)
输入:max.Money(欧盟)=600000欧元
输出:Euro
这很好,但输入可能是这样的:
max.Money(EU)=600000欧元加上一个人20000欧元
在=
可以成为任何东西之前,我只知道=
是固定的。所以每个输入都有这个
因此,我正在搜索一个正则表达式,它将为我提供这个输入和输出:Euro plus for one person
我尝试使用类似于
(\D+)
的正则表达式,但我将获得3个匹配项。有人知道如何在一个匹配中获取所有出现的内容吗?一个匹配操作无法匹配不连续的文本
最简单的解决方法是捕获=
+number之后的整个子字符串,然后使用preg\u replace(“~\s*\d+~”,“,$m[1])
从匹配中删除数字
见:
由于您提到一个=
后面不必跟1+个数字,您实际上可以在第一个=
处分解字符串,然后删除第二个项目中的数字:
$chunks = explode("=", $str, 2);
if (count($chunks) == 2) {
$res = preg_replace('~\s*\d+~', '', $chunks[1]);
}
请参阅。尝试。谢谢,但这也会给我20000。请使用preg\u replace(“~\s*\d+~”,“$m[1])将其从匹配项中删除。
-请参阅。这是最简单的方法,因为你不能用1个匹配操作匹配不连续的文本。这看起来不需要正则表达式,因为它看起来非常静态。可能会在=
上拆分,并获得第二位的空格分隔值。@WiktorStribiżew谢谢,请将此作为答案发布,以便我可以接受它?我将$re
更改为$re='/=\d*\s*(*)/因为在=
之后的第一个位置不必有数字。没提到。啊哈,那你真的可以用爆炸了。某物
$chunks = explode("=", $str, 2);
if (count($chunks) == 2) {
$res = preg_replace('~\s*\d+~', '', $chunks[1]);
}