2017-02-07 4 views
2

私はすべての単語にマッチする正規表現を探していますが、マッチは1つしか出ません。私が持っているものRegexは1つのマッチですべてのマッチを取得します


正規表現:(.*\={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

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+数字が続くことを持っていないことを言及しているので、あなたが本当にただexplode最初=の文字列と2番目の桁を削除することができますアイテム:

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

this PHP demoを参照してください。

+0

'$ re 'を' $ '=' /' \ d * \ s *(。*)/ ';'に変更したのは、 '='の後の最初の位置に数字を入れる必要がないからです。それを言い逃れました。 –

+1

ああ、あなたは本当に 'explode'を使うことができました。何か[これが好き](http://ideone.com/MJlVE0)。 –

関連する問題