鍍金池/ 教程/ C/ 分枝條件
后向引用
零寬斷言
如何寫出高效率的正則表達式
平衡組/遞歸匹配
字符轉(zhuǎn)義
元字符
測試正則表達式
什么是正則表達式
重復
貪婪與懶惰
字符類
常用正則表達式
詳細語法
表達式全集
處理選項
負向零寬斷言
反義
分枝條件
注釋
分組
入門

分枝條件

不幸的是,剛才那個表達式也能匹配 010)12345678 或 (022-87654321 這樣的“不正確”的格式。要解決這個問題,我們需要用到分枝條件。正則表達式里的分枝條件指的是有幾種規(guī)則,如果滿足其中任意一種規(guī)則都應(yīng)該當成匹配,具體方法是用|把不同的規(guī)則分隔開。聽不明白?沒關(guān)系,看例子:

0\d{2}-\d{8}|0\d{3}-\d{7}這個表達式能匹配兩種以連字號分隔的電話號碼:一種是三位區(qū)號,8 位本地號(如010-12345678),一種是 4 位區(qū)號,7 位本地號(0376-2233445)。

(?0\d{2}\)?[- ]?\d{8}|0\d{2}[- ]?\d{8}這個表達式匹配3位區(qū)號的電話號碼,其中區(qū)號可以用小括號括起來,也可以不用,區(qū)號與本地號間可以用連字號或空格間隔,也可以沒有間隔。你可以試試用分枝條件把這個表達式擴展成也支持4位區(qū)號的。

\d{5}-\d{4}|\d{5}這個表達式用于匹配美國的郵政編碼。美國郵編的規(guī)則是 5 位數(shù)字,或者用連字號間隔的9位數(shù)字。之所以要給出這個例子是因為它能說明一個問題:使用分枝條件時,要注意各個條件的順序。如果你把它改成\d{5}|\d{5}-\d{4}的話,那么就只會匹配 5 位的郵編(以及 9 位郵編的前 5 位)。原因是匹配分枝條件時,將會從左到右地測試每個條件,如果滿足了某個分枝的話,就不會去再管其它的條件了。

上一篇:后向引用下一篇:貪婪與懶惰