什麼是正則表達式呢,先來看一下百度百科中的解釋:
正則表達式,又稱規則表達式。(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE),計算機科學的一個概念。正則表通常被用來檢索、替換那些符合某個模式(規則)的文本。
簡單來說,正則表達式是一種特定的模式,可以用來對文本進行匹配、替換或刪除等操作。正則表達式本身與編程語言無關,是一種強大的文本處理工具。
正則表達式由兩種字符構成:元字符和普通文本字符。其中,元字符 即正則表達式中的特殊字符,為正則表達式提供了強大的描述能力,如:*
和.
量詞:?
, +
, *
。這三個元字符可以用來限定所作用元素的重現次數。
字符組:形如[Regex...]
的表達式子句
貪婪:如*
字符。貪婪量詞會匹配盡可能多的字符串
非貪婪模式:即盡可能少的匹配字符串,一般對表達式後加?
即可實現
\.
匹配一個“.”
\bis\b
舉例:清溪路555號10號樓
匹配地址中的路號,首先可能會想到:.*(\d+)號.*
,但實際上,前面的.*
為貪婪模式,會首先向後盡可能多的匹配,會導致小括號中的\d+
只能匹配到10號樓
中的0
(因為是從左向右開始匹配,.*
匹配用掉了太多的字符串,只留下一個數字0
給\d+
進行匹配)。
如果想要匹配出555
,則需要寫成.*?(\d+)號.*
,注意多了一個問號。這就是非貪婪模式,問號前面的表達式會盡可能少的匹配,只要整個表達式匹配成功即可。
基本上可以總結如下表達式:
正則表達式中的分組,基本都由(exp)
模式來實現,常見語法如下:
(.+?(?=\w+?號樓))
,會匹配出清溪路555號
(?<=exp)
匹配exp後面的位置
(?!exp)
匹配後面不是exp的位置,如137(?!\d)
匹配的是137開頭的、非數字結尾的字符串,例:137a
(?<!exp)
匹配前面不是exp的位置