简体   繁体   中英

Regex get all matches in one match

I'm searching for a regex that matches all words, but will give only one match.

What I have:


Regex: (.*\\={1})\\d+(\\D*)

Input: max. Money (EU)=600000 Euro max. Money (EU)=600000 Euro

Output: Euro


This works fine, but it's possible that the Input is like this: max. Money (EU)=600000 Euro plus 20000 for one person max. Money (EU)=600000 Euro plus 20000 for one person .

Before the = could be anything, the only thing that I know is that the = is fixed. So every input have this.

So I'm searching for a regex that will give me for this input this output: Euro plus for one person .

I tried to use a regex like (\\D+) , but I'll get for this input 3 matches. Does someone know how to get all occurences in one match?

One cannot match discontinuous text with 1 match operation.

The easiest workaround is to capture the whole substring after = + number, and then remove numbers from the match with preg_replace('~\\s*\\d+~', '', $m[1]) .

See the 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

Since you mention that a = does not have to be followed by 1+ digits, you may really just explode the string at the first = and then remove digits in the second item:

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

See this PHP demo .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM