php - 正则表达式在一场比赛中获取所有比赛

标签 php regex

我正在搜索一个匹配所有单词的正则表达式,但只会给出一个匹配项。

我有:


正则表达式:(.*\={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/

相关文章:

php - 检查 mysql 表中的 future 时间

正则表达式替换字符串中至少 5 位数字

正则表达式匹配 bash 中文件的全部内容

正则表达式查找站点名称并使用它

regex - 使用正则表达式排除字符串的前 3 个字符

javascript - 如何使用正则表达式来验证中文输入?

php - 从数据库表渲染HTML以查看 Blade 问题

php - 如何将多行从一个表传输到另一个表 (SQL)

php - 用 php 重置 auto_increment

php - 如何将用户从 php 文件重定向回 dreamhost 上的 `index.html`