簡體   English   中英

帶有 OR 運算符的正則表達式未捕獲“雙重”匹配

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM