第5章 匹配模式
所謂的匹配模式(match mode),指的是匹配時使用的規則。設置特定的模式,可能會改變對正則表達式的識別,也可能會改變正則表達式中字符的匹配規定。常用的匹配模式一共有4種:不區分大小、單行模式、多行模式、注釋模式
5.1 不區分大小寫模式
必須首先了解模式的指定方式。通常,有兩種辦法指定匹配模式:以模式修飾指定,或者以預定義的常量作為特俗參數傳入指定。
語言 | test |
---|---|
.NET | RegexOptions.IgnoreCase |
Java | Pattern.CASE_INSENSITIVE |
JavaScript | /regex/i |
PHP | /regex/i |
Python | re.I re.IGNORECASE |
Ruby | Regexp::IGNORECASE /regex/i |
5.2 單行模式
單行模式對應的模式修飾符是s
(Single line),所以如果用模式修飾符,可以在表達式的開頭用(?s)
(Python)指定。
語言 | test |
---|---|
.NET | RegexOptions.Singleline |
Java | Pattern.DOTALL |
JavaScript | 不支持此模式 |
PHP | /regex/s |
Python | re.S re.DOTALL |
Ruby | Regexp::MULTILINE /regex/m |
5.3 多行模式
單行模式影響的是點號的匹配規則:在默認模式下,點號.
可以匹配除換行符之外的任何字符,在單行模式下,點號.
可以匹配包括換行符在內的任何字符;多行模式影響的是^和&的匹配規則:
在默認模式下,^
和$
匹配的是整個字符串
的起始位置和結束位置,但在多行模式下,它們也能匹配字符串內部
某一行文本的起始位置和結束位置。
語言 | test |
---|---|
.NET | RegexOptions.Multiline |
Java | Pattern.MULTILINE |
JavaScript | /regex/m |
PHP | /regex/m |
Python | re.M re.MULTILINE |
Ruby | 默認即為多行模式 |
5.4 注釋模式
注釋模式對應的模式修飾符是x
(extended mode, 擴展模式,但更常見的寫法是 free-spacing mode,寬松格式模式)。
語言 | test |
---|---|
.NET | RegexOptions.IgnorePatternWhitespace |
Java | Pattern.COMMENTS |
JavaScript | /regex/x |
PHP | /regex/x |
Python | re.X re.VERBOSE |
Ruby | Regexp::EXTENDED /regex/x |