在使用正規表示式時有時我們需要對特定的表示式進行重複,一般有兩種方法:
1.
使用大括號表示匹配前面出現的正規表示式n次,用於連續的重複匹配,例如\d
可匹配567
。
2. \n
匹配前面出現的第n個分組的正規表示式一次,可用於不連續的重複匹配,例如(\d)[a-z]\1
可匹配3a3
。
這兩種重複的方式最特別的不同是:前者是對正規表示式的簡單重複,後者是對被匹配字元(串)的直接重複。
實際上,如果表示式中重複的是確定的某一字元(串),則兩者沒有區別,但在正規表示式中碰到的更多的是重複某一範圍內的任意乙個字元(串),這時靈活使用這兩種重複方式就顯得尤為重要了。
舉例來說,正規表示式[0-9]
和([0-9])\1
所能匹配的結果完全不同,前者匹配所有的兩個數字,而後者只能匹配兩個重複的數字。
現在我們來使用正規表示式來匹配13位手機號碼,假設它的記錄形式有兩種,一種是直接寫出所有數字:13612345678;另一種是採用分隔符:136-1234-5678,任何其他分隔形式(如13-6123-4567-8或1361-2345-678)都是不可接受的。
根據以上的論述,最合理的正規表示式應該為:
\d(-?)\d\1\d
正規表示式入門之重複匹配
例1 比如我想匹配文字裡所有的郵箱 文字 文字 send e mail to tom and ada,their mailbox is 1944786548 qq.com and 18755518273 163.com,don t forget,green s mailbox is green.su...
正規表示式 匹配
字串 void abtr quint32 ab 表示乙個正規表示式 template class bidirectionaliterator class allocator std allocator sub match bidirectionaliterator class match resul...
正規表示式匹配
請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 解法 首先要想到用遞迴處理...