2017-02-07 111 views
2

我正在寻找匹配所有单词的正则表达式,但只会给出一个匹配。正则表达式在一场比赛中获得所有比赛

我有什么:


正则表达式:(.*\={1})\d+(\D*)

输入:max. Money (EU)=600000 Euro

输出:Euro


这工作得很好,但它可能是输入的是像这样:max. Money (EU)=600000 Euro plus 20000 for one person

=可能是任何东西之前,我唯一知道的是=是固定的。所以每个输入都有这个。

所以我正在寻找一个正则表达式,它会给我这个输入这个输出:Euro plus for one person

我试图使用像(\D+)正则表达式,但我会得到这个输入3匹配。有人知道如何在一场比赛中得到所有的出场机会吗?

+0

试试['/=\d+\s*(.*)/'](https://regex101.com/r/hxmPDp/1)。 –

+0

谢谢,但这也会给我20000。 –

+1

将它从'preg_replace('〜\ s * \ d +〜','',$ m [1])''的匹配中移除 - 请参阅https://ideone.com/8juazv。这是最简单的方法,因为您无法通过1次匹配操作来匹配不连续的文本。 –

回答

3

一个匹配操作无法匹配不连续的文本。

最简单的解决方法是在= +号码后捕获整个子字符串,然后从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+数字,您可能真的只是explode在第一=,然后将字符串中删除数字在第二item:

$chunks = explode("=", $str, 2); 
if (count($chunks) == 2) { 
    $res = preg_replace('~\s*\d+~', '', $chunks[1]); 
} 

请参阅this PHP demo

+0

我将'$ re'改为'$ re ='/ = \ d * \ s *(。*)/';',因为在'='之后的第一个位置不一定是数字。错过了提及。 –

+1

啊哈,那么你真的可以使用'explode'。 [像这样](http://ideone.com/MJlVE0)。 –