[英]Regex with OR operator not catching "double" matches
使用 PHP 的preg_match_all
我有以下問題。
示例字符串:
last_name, first_name
bjorge, philip
sdfsdf credit note dfsdf
kardashian, kim
mercury, freddie
正則表達式:
/\bcredit\b|\bcredit note\b|\bfreddie\b/
當前結果:
array(1
0 => array(2
0 => credit
1 => freddie
)
)
預期結果:
array(1
0 => array(3
0 => credit
1 => credit note
2 => freddie
)
)
https://www.phpliveregex.com/p/GeW#tab-preg-match-all
可能是一個非常常見的問題,但我無法找到解決方案。
您不能重新訪問相同的 position 兩次以匹配相同的字符串。
您可以做的是將它們與捕獲組放在一個前瞻中,並使credit
部分成為可選
$re = '/\b(?=((?:credit )?note|freddie)\b)/';
$str = 'last_name, first_name
bjorge, philip
sdfsdf credit note dfsdf
kardashian, kim
mercury, freddie';
preg_match_all($re, $str, $matches);
var_dump($matches[1]);
Output
array(3) {
[0]=>
string(11) "credit note"
[1]=>
string(4) "note"
[2]=>
string(7) "freddie"
}
last_name, first_name
bjorge, philip
credit <----- ;)
sdfsdf credit note dfsdf
kardashian, kim
mercury, freddie
改變輸入。
正則表達式將匹配一次,因此根據您的結果,您需要考慮“貸方票據”包含“信用”。 如果您在 php 工作,可以使用 preg_quote()。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.