正則表達式
正則表達用來匹配字符串
正則表達式匹配過程
正則表達式語法規則
語法 | 說明 | 表達式實例 | 匹配字符串 |
字符 | |||
| . | 匹配除換行"/n"外的任意字符串 | abc | abc |
| / | 轉義字符,使后一個字符改變原來的意思 | a//c | a/c |
| [...] | 字符集,對應的位置可以是字符集中任意字符,字符集中的字符可以逐個列出,也可以給出范圍,如[abc]或[a-c]。第一個字符如果是^則表示取反,如[^abc]表示不是abc中的其他字符。所有的特殊的字符在字符集中都失去其原有的特殊含義。在字符集中使用^、]或-,可以使用轉義字符匹配它們 | a[bcd]e | abe ace ade |
預定義字符集 | |||
| /d | 數字:[0-9] | a/dc | a1c |
| /D | 非數字:[^0-9] | a/Dc | abc |
| /s | 空白字符:[<空格>/t/r/n/f/v] | a/sc | a c |
| /S | 非空白字符:[^/s] | a/Sc | abc |
| /w | 單詞字符:[a-zA-z0-9_] | a/wc | abc |
| /W | 非單詞字符:[^/w] | a/Wc | a c |
數量詞 | |||
| * | 匹配一個字符串0或無限次 | abc* | ab abc abccc |
| + | 匹配一個字符串1次或無限次 | abc+ | abc abccc |
| ? | 匹配一個字符串0次或1次 | abc? | ab abc |
| {m} | 匹配一個字符串m次 | abc{2} | abcc |
| {m,n} | 匹配一個字符串m到n次 | abc{2,3} | abcc abccc |
邊界匹配 | |||
| ^ | 匹配字符串開頭 | ^abc | abc |
| $ | 匹配字符串末尾 | abc$ | abc |
| /A | 匹配字符串開始 | /Aabc | abc |
| /Z | 匹配字符串結束,如果是存在換行,只匹配到換行前的結束字符串 | abc/Z | abc |
| /b | 匹配一個單詞邊界,也就是指單詞和空格間的位置。例如, 'er/b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。 | ||
| /B | 匹配非單詞邊界。'er/B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。 | ||
邏輯分組 | |||
| | | 匹配|表達式左右的任意一個 | abc|def | abc def |
| (...) | 作為分組,每遇到一個(,分組編號加1,使用分組的好處是匹配的子串會保存到一個子組,便于以后使用 | (abc){2} | abcabc |
| (?P<name>...) | 分組除原有編號外,再加一個別名 | (?P<id>abc){2} | abcabc |
| /<number> | 引用編號為number的分組匹配到的字符串 | (/d)ab/1 | 1ab1 5ab5 |
| (?P=name) | 應用別名為name的分組匹配到的字符串 | (?P<id>abc)ee(?P=name) | abceeabc |
特殊構造(不分組) | |||
| (?:...) | (...)的不分組版本,用于|或后接數量詞 | (?:abc){2} | abcabc |
| (?iLmsux) | iLmsux中的每個字符代表正則表達式的一種匹配模式,只能用在正則表達式開頭,可選多個 | (?i)abc | AbC |
| (?#...) | 將#后面的字符當做注釋忽略 | abc(?#comment)def | abcdef |
| (?=...) | 之后的字符串表達式需要匹配才能成功,不消耗字符串內容 | a(?=/d) | 后面是數字的a |
| (?!...) | 之后的字符串表達式需要不匹配才能成功,不消耗字符串內容 | a(?!/d) | 后面不是數字的a |
| (?<=...) | 之前的字符串表達式需要匹配才能成功,不消耗字符串內容 | (?<=/d)a | 前面是數字的a |
| (?<!...) | 之前的字符串表達式需要不匹配才能成功,不消耗字符串內容 | (?<!/d)a | 前面不是數字的a |
| (?(id/name)yes_ pattern|no_parttern) | 如果匹配到分組為id或別名name的字符串成功匹配,則需要匹配yes_pattern 不成功,怎需要匹配no_pattern | (/d)abc(?(1)/d|def) | 1abc3 abcdef |
新聞熱點
疑難解答