免責聲明:我不需要另一個更好沒有重置組的正則表達式。我需要了解爲什麼輸出不同PHP 5
和PHP 7
。對分支重置組的反向引用
問題:我試圖使用分支重置組來匹配使用PHP
的字符串,該字符串由不同分隔符分隔的幾組數字組成。
$string = '12-34-56-78';
$pattern = '/^\d{2}(?|(---)|(-)|(\.)|(\:))\d{2}\1\d{2}\1\d{2}$/';
$matches = preg_match($pattern, $string) === 1;
var_dump($matches);
不幸it works only爲PHP < 7
。我也檢查了libpcre
的版本,這不是問題的根源。 libpcre
的相同版本針對不同的PHP
版本返回不同的結果。
我無法找到任何關於PHP 7
中發生了什麼變化的原因。
問題:爲什麼輸出不同PHP 5
和PHP 7
?這是PHP 7
的預期行爲嗎?
更新:似乎是bug。
您不需要在此處重置任何分支,因爲您需要引用整個組值。僅僅是['^ \ d {2}(--- | [ - .:])\ d {2} \ 1 \ d {2} \ 1 \ d {2} $'](https:// regex101。 com/r/oqj4Ux/1)將在每個版本中運行。 –
@WiktorStribiżew再次感謝你。我知道我可以使用另一個'正則表達式'。但這不是我所問的。 – Kolyunya
我覺得我們可以把它減少到'$ string =' - '; $ pattern ='/ ^(?|(---)|( - )\ 1)/';'並觀察相同的行爲。 –