正規表示式的重複匹配問題

2021-07-25 08:29:55 字數 737 閱讀 3099

在使用正規表示式時有時我們需要對特定的表示式進行重複,一般有兩種方法:

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 均不匹配 解法 首先要想到用遞迴處理...