正規表示式括號的使用
1 分組
上一章提到過的量詞只針對緊鄰的字元(組)起作用,例如html語言中的標籤
匹配:][\s\s]+?
其中忽略優先量詞+?,只對緊鄰的字元組[\s\s]起作用,如果需要對之前所有的部分起作用就需要用到圓括號(),寫成:
(][\s\s])+?
起到了將][\s\s]看做乙個整體的作用,即分組。
2 多選結構
括號的第二個作用就是製造出乙個多選結構,兩個或以上個表示式中都是合法匹配的表示式(適用多種情況時),多選結構的形式是(…|…),用豎線|分割子表示式,這些子表示式也叫多選分支,多選分支可以有好多個,只要有1個分支匹配成功即宣告匹配成功,否則匹配失敗,可以模擬c語言中的switch-case結構,失敗就走default下的**。
3 pattern
pattern對應正規表示式物件,如何把乙個字串變成程式可以識別的正規表示式?這就需要用到pattern的方法compile():
pattern pattern = pattern.compile(string regex);
regex 是提前編輯好的正規表示式字串。這樣編譯好的正規表示式可以為接下來的切分或者匹配操作鋪墊。
4 matcher
matcher可以理解為「某次匹配的結果物件」。就是把編譯過的pattern物件應用到某個string物件(下面的例子使用text表示),產生的matcher物件結果。例如:
pattern pattern = pattern.compile(string regex);
matcher matcher = pattern.matcher(string text);
那麼如何獲取到匹配成功的結果呢?matcher物件呼叫方法find(),返回true就表示找到乙個匹配,反之false就是沒找到。進一步地如果想要得到匹配的內容呢?
為了解決這個問題,就先切到括號的下乙個使用方法。
5 引用分組
在使用括號之後,正規表示式會儲存每個分組真正匹配的字串。這種功能叫做捕獲分組,括號叫做捕獲型括號。那麼如何根據個人的意願選擇輸出某乙個分組,或者某幾個分組?
答案是,使用編號,從表示式最左邊的左括號編號記為1,這一對左右括號之間的部分為分組1,例如:
表示式:((\d)-(\d)-(\d))
1號分組:(\d)-(\d)-(\d)
2號分組:\d
3號分組:\d
4號分組:\d
matcher物件可以呼叫group(int i)方法,獲取相應的分組,其中i是分組編號,0號分組是表示整個表示式所捕獲的分組:
while(matcher.find())
正規表示式 括號
用字元組和量詞可以匹配引號字串,也可以匹配 html tag,如果需要用正規表示式匹配身份證號碼,依靠字元組和量詞能不能做到呢?身份證號碼是乙個長度為15或18個字元的字串,如果是15位,則全部由數字組成,首位不能為0 如果是18位,則前17位全部是數字,末位可能是數字,也可能是x。規則非常明確,可...
python正規表示式括號問題
正規表示式中的圓括號 的作用是對字元或元字元分組。我錯把它的作用認為是將圓括號內的字元看成乙個整體。儘管在一些正則測試 上,進行匹配時,把括號內的字元看成乙個整體來匹配也能匹配到想要的結果。測試 如 regex101等 然而在在寫python程式的時候,會出現不是我想要的結果。如果正規表示式中多出使...
python正規表示式及使用正規表示式的例子
正規表示式 正則表達用來匹配字串 正規表示式匹配過程 正規表示式語法規則 匹配除換行 n 外的任意字串 abcabc 轉義字元,使後乙個字元改變原來的意思 a c a c 字符集,對應的位置可以是字符集中任意字元,字符集中的字元可以逐個列出,也可以給出範圍,如 abc 或 a c 第乙個字元如果是 ...