簡體   English   中英

正則表達式-如何控制括號是標記子組還是進行其他操作(PHP-preg_match)

[英]Regular expressions - How to control whether parenthesis mark a sub group or do something else (PHP - preg_match)

如何控制正則表達式中的圓括號是否標記一個子組,是否做其他事情或兩者都做?

例如,如果我有諸如“ AA12345”和“ AB12345”之類的字符串,並且我想對前兩個始終為AA或AB的字母進行preg_match設置,則我可以:

preg_match('/(A(A|B)).*/',$string,$matches);

(我為這個問題放了。*,因為字符串的其余部分無關緊要)

通過這種設置,假設$ string =“ AA12345”,我得到的是$ matches =

Array
(
[0] => AA12345
[1] => AA
[2] => A
)

結果我不需要或想要“ [2] => A”,但是我不能從正則表達式中刪除括號,因為OR運算符需要它們。 我該如何處理? 只是忽略結果,還是有更好的方法?

您可以使用(?:...)形式的“非捕獲組”:

preg_match('/(A(?:A|B)).*/',$string,$matches);

正如文檔所述

如果左括號后面跟有“?:”,則該子圖案不執行任何捕獲,並且在計算任何后續捕獲子圖案的數量時不進行計數。 例如,如果字符串“白色皇后”與模式匹配,則捕獲的子字符串((?:red | white)(king | queen))為“白色皇后”和“女王”,並分別編號為1和2 。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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