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.