第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 |
