分享一個大牛的人工智能教程。零基礎!通俗易懂!風趣幽默!希望你也加入到人工智能的隊伍中來!請點擊http://www.captainbed.net
正則表達式風味(引擎)說明
風味是規範,引擎是實現。
名稱 | 說明 | 應用 |
---|---|---|
.NET | 由 System.Text.RegularExpressions 相關類 提供的正則引擎。 |
基於 .Net 的語言和軟件。如 C#, Visual Basic.Net, F#, Powershell, Delphi for .NET 等。 |
Java | 由 java.util.regex 包提供, 在 Java 4 (JDK 1.4.x) 及更新的版本中可用。在 Java 5 (JDK 1.5.x) 和 6 (JDK 1.6.x) 中添加了一些新功能。 |
基於 JVM 的語言和軟件,如 Java, Clojure 等。 |
Perl | 內置於 Perl 的正則表達式引擎,5.6 之前的版本不支持 Unicode。 | Perl 編程語言。 |
PCRE | 來自開源項目 PCRE的正則表達式引擎。 本文介紹的功能在 PCRE 5.x 和 6.x 中可用。 | REALbasic(Xojo) 語言; Delphi 組件 TPerlRegEx 和 Delphi XE 和 C++Builder XE 的單元 RegularExrpessions 和 RegularExpressionsCore ; PHP 的 preg 函數; R 語言(perl = true ); COM 對象 Microsoft VBScript Regular Expressions 5.5。 |
JS(JavaScript) | 由 ECMA-262 標準第 3 版定義的腳本語言(ECMAScript)中的正則表達式語法。 | JavaScript 編程語言;VBScript 中的 RegExp ;ClojureScript 編程語言。 |
Python | 由 Python 內置模塊 re 支持。 |
Python 編程語言。 |
Ruby | 由 Ruby 內置的正則表達式引擎。 | Ruby 編程語言。 |
Tcl ARE | 由 Henry Spencer 爲 Tcl 8.2/8.4 中命令 regexp 開發,被稱爲高級正則表達式(Advanced Regular Expressions, ARE)。 |
Tcl 編程語言;PostgreSQL 7.4 及更新版本;wxWidgets(wxRE_ADVANCED )。 |
POSIX BRE | 由 IEEE POSIX 標準 1003 定義的基本正則表達式(Basic Regular Expressions)。 | Unix 上的軟件工具;R 語言(perl = false, extended = false );Tcl的 基本風味(Extended Regular Expressions),wxWidgets(wxRE_BASIC )。 |
POSIX ERE | 由 IEEE POSIX 標準 1003 定義的擴展正則表達式(Extended Regular Expressions)。 | Unix 上的軟件工具,如 awk, grep, egrep, emacs 等(Emacs 不支持 POSIX 字符類, 排序序列和等值字符); MySQL, Oracle 數據庫( Oracle 支持標準外的後向引用,從 \1 到 \9 ),PostgreSQL 7.3 及更早版本; PHP 的 ereg 函數,R 語言默認狀態,Tcl 的擴展風味(Extended Regular Expressions),wxWidgets(wxRE_EXTENDED )。 |
GNU BRE | GNU 基本正則表達式(GNU Basic Regular Expressions), 包含 POSIX BRE 及 GNU 擴展。 | GNU 實現的經典 UNIX 工具,如 GNU/Linux 上的 sed 等。 |
GNU ERE | GNU 擴展正則表達式(Extended Regular Expressions), 包含 POSIX ERE 及 GNU 擴展。 | GNU 實現的經典 UNIX 工具,如 GNU/Linux 上的 egrep, grep 等。 |
XML | 由 XML Schema 標準的附錄 G定義。 | XML Schema。 |
XPath | 由 XQuery 1.0 和 XPath 2.0 標準中的函數與運算符章節定義。 | XQuery, XPath。 |
JGsoft | 由 Just Great Software 產品使用的正則表達式引擎。 | PowerGREP, EditPad Pro, AceText, RegexBuddy 等。 |
正則表達式風味(引擎)特性對比
字符 | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
特性 | JGsoft | .NET | Java | Perl | PCRE | JS | Python | Ruby | Tcl ARE | POSIX BRE | POSIX ERE | GNU BRE | GNU ERE | XML | XPath |
\ 轉義單個元字符 |
YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES |
\Q...\E 轉義多個元字符 |
YES | no | Java 6 | YES | YES | no | no | no | no | no | no | no | no | no | no |
\x00 ~ \xFF (ASCII 字符) |
YES | YES | YES | YES | YES | YES | YES | YES | YES | no | no | no | no | no | no |
\n (換行), \r (回車), \t (製表) |
YES | YES | YES | YES | YES | YES | YES | YES | YES | no | no | no | no | YES | YES |
\f (換頁), \v (豎直製表) |
YES | YES | YES | YES | YES | YES | YES | YES | YES | no | no | no | no | no | no |
\a (響鈴) |
YES | YES | YES | YES | YES | no | YES | YES | YES | no | no | no | no | no | no |
\e (轉義) |
YES | YES | YES | YES | YES | no | no | YES | YES | no | no | no | no | no | no |
\b (退格), \B (反斜槓, \ ) |
no | no | no | no | no | no | no | no | YES | no | no | no | no | no | no |
\cA ~ \cZ (控制字符) |
YES | YES | YES | YES | YES | YES | no | no | YES | no | no | no | no | no | no |
\ca ~ \cz (控制字符) |
YES | YES | no | YES | YES | YES | no | no | YES | no | no | no | no | no | no |
字符類/字符集 [abc] |
|||||||||||||||
特性 | JGsoft | .NET | Java | Perl | PCRE | JS | Python | Ruby | Tcl ARE | POSIX BRE | POSIX ERE | GNU BRE | GNU ERE | XML | XPath |
[abc] 字符類 |
YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES |
[^abc] 反義字符類 |
YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES |
[a-z] 字符類範圍 |
YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES |
[\d-z] 中的 - 視爲字面量 |
YES | YES | YES | YES | YES | no | no | no | no | no | no | no | no | no | no |
[a-\d] 中的 - 視爲字面量 |
YES | no | no | no | YES | no | no | no | no | no | no | no | no | no | no |
\ 轉義單個字符類元字符 |
YES | YES | YES | YES | YES | YES | YES | YES | YES | no | no | no | no | YES | YES |
\Q...\E 轉義多個字符類元字符 |
YES | no | Java 6 | YES | YES | no | no | no | no | no | no | no | no | no | no |
\d 代表數字 |
YES | YES | ascii | YES | ascii | ascii | option | ascii | YES | no | no | no | no | YES | YES |
\w 代表單詞字符 |
YES | YES | ascii | YES | ascii | ascii | option | ascii | YES | no | no | YES | YES | YES | YES |
\s 代表空白字符 |
YES | YES | ascii | YES | ascii | YES | option | ascii | YES | no | no | YES | YES | ascii | ascii |
\D , \W and \S 代表反義字符類 |
YES | YES | YES | YES | YES | YES | YES | YES | YES | no | no | YES | YES | YES | YES |
[\b] 匹配反斜槓(\ ) |
YES | YES | YES | YES | YES | YES | YES | YES | YES | no | no | no | no | no | no |
點 | |||||||||||||||
特性 | JGsoft | .NET | Java | Perl | PCRE | JS | Python | Ruby | Tcl ARE | POSIX BRE | POSIX ERE | GNU BRE | GNU ERE | XML | XPath |
. 匹配換行符(\n )外所有字符 |
YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES |
錨點 | |||||||||||||||
特性 | JGsoft | .NET | Java | Perl | PCRE | JS | Python | Ruby | Tcl ARE | POSIX BRE | POSIX ERE | GNU BRE | GNU ERE | XML | XPath |
^ 字符串/行開始 |
YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | no | YES |
$ 字符串/行結束 |
YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | no | YES |
\A 字符串開始 |
YES | YES | YES | YES | YES | no | YES | YES | YES | no | no | no | no | no | no |
\Z 字符串結束,最後一個\n前 |
YES | YES | YES | YES | YES | no | no | YES | YES | no | no | no | no | no | no |
\z 字符串結束 |
YES | YES | YES | YES | YES | no | \Z |
YES | no | no | no | no | no | no | no |
\` 字符串開始 |
no | no | no | no | no | no | no | no | no | no | no | YES | YES | no | no |
\' 字符串結束 |
no | no | no | no | no | no | no | no | no | no | no | YES | YES | no | no |
單詞邊界 | |||||||||||||||
特性 | JGsoft | .NET | Java | Perl | PCRE | JS | Python | Ruby | Tcl ARE | POSIX BRE | POSIX ERE | GNU BRE | GNU ERE | XML | XPath |
\b 單詞的開始或結束處 |
YES | YES | YES | YES | ascii | ascii | option | ascii | no | no | no | YES | YES | no | no |
\B 不是單詞的開始處或結束處 |
YES | YES | YES | YES | ascii | ascii | option | ascii | no | no | no | YES | YES | no | no |
\y 單詞的開始或結束處 |
YES | no | no | no | no | no | no | no | YES | no | no | no | no | no | no |
\Y 不是單詞的開始處或結束處 |
YES | no | no | no | no | no | no | no | YES | no | no | no | no | no | no |
\m 單詞的開始處 |
YES | no | no | no | no | no | no | no | YES | no | no | no | no | no | no |
\M 單詞的結束處 |
YES | no | no | no | no | no | no | no | YES | no | no | no | no | no | no |
\< 單詞的開始處 |
no | no | no | no | no | no | no | no | no | no | no | YES | YES | no | no |
\> 單詞的結束處 |
no | no | no | no | no | no | no | no | no | no | no | YES | YES | no | no |
分支條件 | |||||||||||||||
特性 | JGsoft | .NET | Java | Perl | PCRE | JS | Python | Ruby | Tcl ARE | POSIX BRE | POSIX ERE | GNU BRE | GNU ERE | XML | XPath |
| 分支條件 |
YES | YES | YES | YES | YES | YES | YES | YES | YES | no | YES | \| | YES | YES | YES |
量詞 | |||||||||||||||
特性 | JGsoft | .NET | Java | Perl | PCRE | JS | Python | Ruby | Tcl ARE | POSIX BRE | POSIX ERE | GNU BRE | GNU ERE | XML | XPath |
? 0 ~ 1 次 |
YES | YES | YES | YES | YES | YES | YES | YES | YES | no | YES | \? | YES | YES | YES |
* 0 次或更多次 |
YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | YES |
+ 1 次或更多次 |
YES | YES | YES | YES | YES | YES | YES | YES | YES | no | YES | \+ | YES | YES | YES |
{n} n 次 |
YES | YES | YES | YES | YES | YES | YES | YES | YES | \{n\} | YES | \{n\} | YES | YES | YES |
{n,m} n ~ m 次 |
YES | YES | YES | YES | YES | YES | YES | YES | YES | \{n,m\} | YES | \{n,m\} | YES | YES | YES |
{n,} n 次或更多次 |
YES | YES | YES | YES | YES | YES | YES | YES | YES | \{n,\} | YES | \{n,\} | YES | YES | YES |
量詞後加 ? 轉爲懶惰模式 |
YES | YES | YES | YES | YES | YES | YES | YES | YES | no | no | no | no | no | YES |
分組與後向引用 | |||||||||||||||
特性 | JGsoft | .NET | Java | Perl | PCRE | JS | Python | Ruby | Tcl ARE | POSIX BRE | POSIX ERE | GNU BRE | GNU ERE | XML | XPath |
(regex) 編號捕獲組 |
YES | YES | YES | YES | YES | YES | YES | YES | YES | \( \) | YES | \( \) | YES | YES | YES |
(?:regex) 非捕獲組 |
YES | YES | YES | YES | YES | YES | YES | YES | YES | no | no | no | no | no | no |
\1 ~ \9 後向引用 |
YES | YES | YES | YES | YES | YES | YES | YES | YES | YES | no | YES | YES | no | YES |
\10 ~ \99 後向引用 |
YES | YES | YES | YES | YES | YES | YES | YES | YES | no | n/a | no | no | n/a | YES |
前向引用 \1 through \9 |
YES | YES | YES | YES | YES | no | no | YES | no | no | n/a | no | no | n/a | no |
嵌套引用 \1 ~ \9 |
YES | YES | YES | YES | YES | YES | no | YES | no | no | n/a | no | no | n/a | no |
後向引用不存在的組報錯 | YES | YES | YES | YES | YES | no | YES | no | YES | YES | n/a | YES | YES | n/a | YES |
後向引用匹配失敗的組失敗 | YES | YES | YES | YES | YES | no | YES | YES | YES | YES | n/a | YES | YES | n/a | YES |
修飾器 | |||||||||||||||
特性 | JGsoft | .NET | Java | Perl | PCRE | JS | Python | Ruby | Tcl ARE | POSIX BRE | POSIX ERE | GNU BRE | GNU ERE | XML | XPath |
(?i) 忽略大小寫 |
YES | YES | YES | YES | YES | /i only | YES | YES | YES | no | no | no | no | no | flag |
(?s) 點(. )可匹配\n |
YES | YES | YES | YES | YES | no | YES | (?m) | no | no | no | no | no | no | flag |
(?m) 行開始/結束可匹配 ^ / $ |
YES | YES | YES | YES | YES | /m only | YES | always on | no | no | no | no | no | no | flag |
(?x) 忽略空白模式 |
YES | YES | YES | YES | YES | no | YES | YES | YES | no | no | no | no | no | flag |
(?n) 顯式匹配 |
YES | YES | no | no | no | no | no | no | no | no | no | no | no | no | no |
(?-ismxn) 關閉模式修飾器 |
YES | YES | YES | YES | YES | no | no | YES | no | no | no | no | no | no | no |
(?ismxn:group) 模式修飾器僅應用於本組 |
YES | YES | YES | YES | YES | no | no | YES | no | no | no | no | no | no | no |
原子組與佔位量詞(possessive quantifiers) | |||||||||||||||
特性 | JGsoft | .NET | Java | Perl | PCRE | JS | Python | Ruby | Tcl ARE | POSIX BRE | POSIX ERE | GNU BRE | GNU ERE | XML | XPath |
(?>regex) 原子組 |
YES | YES | YES | YES | YES | no | no | YES | no | no | no | no | no | no | no |
?+ , *+ , ++, {m,n}+ 佔位量詞 |
YES | no | YES | no | YES | no | no | no | no | no | no | no | no | no | no |
斷言 | |||||||||||||||
特性 | JGsoft | .NET | Java | Perl | PCRE | JS | Python | Ruby | Tcl ARE | POSIX BRE | POSIX ERE | GNU BRE | GNU ERE | XML | XPath |
(?=regex) 正預測先行斷言 |
YES | YES | YES | YES | YES | YES | YES | YES | YES | no | no | no | no | no | no |
(?!regex) 負預測先行斷言 |
YES | YES | YES | YES | YES | YES | YES | YES | YES | no | no | no | no | no | no |
(?<=text) 正回顧後發斷言 |
full regex | full regex | finite length | fixed length | fixed + alternation | no | fixed length | no | no | no | no | no | no | no | no |
(?<!text) 負回顧後發斷言 |
full regex | full regex | finite length | fixed length | fixed + alternation | no | fixed length | no | no | no | no | no | no | no | no |
從上個匹配繼續 | |||||||||||||||
特性 | JGsoft | .NET | Java | Perl | PCRE | JS | Python | Ruby | Tcl ARE | POSIX BRE | POSIX ERE | GNU BRE | GNU ERE | XML | XPath |
\G 匹配嘗試的開始 |
YES | YES | YES | YES | YES | no | no | YES | no | no | no | no | no | no | no |
條件 | |||||||||||||||
特性 | JGsoft | .NET | Java | Perl | PCRE | JS | Python | Ruby | Tcl ARE | POSIX BRE | POSIX ERE | GNU BRE | GNU ERE | XML | XPath |
(?(?=regex)then|else) 使用任意斷言 |
YES | YES | no | YES | YES | no | no | no | no | no | no | no | no | no | no |
(?(regex)then|else) |
no | YES | no | no | no | no | no | no | no | no | no | no | no | no | no |
(?(1)then|else) |
YES | YES | no | YES | YES | no | YES | no | no | no | no | no | no | no | no |
(?(group)then|else) |
YES | YES | no | no | YES | no | YES | no | no | no | no | no | no | no | no |
註釋 | |||||||||||||||
特性 | JGsoft | .NET | Java | Perl | PCRE | JS | Python | Ruby | Tcl ARE | POSIX BRE | POSIX ERE | GNU BRE | GNU ERE | XML | XPath |
(?#comment) |
YES | YES | no | YES | YES | no | YES | YES | YES | no | no | no | no | no | no |
忽略空白 | |||||||||||||||
特性 | JGsoft | .NET | Java | Perl | PCRE | JS | Python | Ruby | Tcl ARE | POSIX BRE | POSIX ERE | GNU BRE | GNU ERE | XML | XPath |
支持忽略空白語法 | YES | YES | YES | YES | YES | no | YES | YES | YES | no | no | no | no | no | YES |
字符類作爲整體 | YES | YES | no | YES | YES | n/a | YES | YES | YES | n/a | n/a | n/a | n/a | n/a | YES |
# 開啓註釋 | YES | YES | YES | YES | YES | n/a | YES | YES | YES | n/a | n/a | n/a | n/a | n/a | no |
Unicode 字符 | |||||||||||||||
特性 | JGsoft | .NET | Java | Perl | PCRE | JS | Python | Ruby | Tcl ARE | POSIX BRE | POSIX ERE | GNU BRE | GNU ERE | XML | XPath |
\X Unicode 字素 |
YES | no | no | YES | option | no | no | no | no | no | no | no | no | no | no |
\u0000 ~ \uFFFF (Unicode 字符) |
YES | YES | YES | no | no | YES | u"string" | no | YES | no | no | no | no | no | no |
\x{0} ~ \x{FFFF} (Unicode 字符) |
YES | no | no | YES | option | no | no | no | no | no | no | no | no | no | no |
Unicode 屬性, 腳本與區塊 | |||||||||||||||
特性 | JGsoft | .NET | Java | Perl | PCRE | JS | Python | Ruby | Tcl ARE | POSIX BRE | POSIX ERE | GNU BRE | GNU ERE | XML | XPath |
\pL ~ \pC (Unicode 屬性) |
YES | no | YES | YES | option | no | no | no | no | no | no | no | no | no | no |
\p{L} ~ \p{C} (Unicode 屬性) |
YES | YES | YES | YES | option | no | no | no | no | no | no | no | no | YES | YES |
\p{Lu} ~ \p{Cn} (Unicode 屬性) |
YES | YES | YES | YES | option | no | no | no | no | no | no | no | no | YES | YES |
\p{L&} , \p{Letter&} 等同於 [\p{Lu}\p{Ll}\p{Lt}] Unicode 屬性 |
YES | no | no | YES | option | no | no | no | no | no | no | no | no | no | no |
\p{IsL} ~ \p{IsC} (Unicode 屬性) |
YES | no | YES | YES | no | no | no | no | no | no | no | no | no | no | no |
\p{IsLu} ~ \p{IsCn} (Unicode 屬性) |
YES | no | YES | YES | no | no | no | no | no | no | no | no | no | no | no |
\p{Letter} ~ \p{Other} (Unicode 屬性) |
YES | no | no | YES | no | no | no | no | no | no | no | no | no | no | no |
\p{Lowercase_Letter} ~ \p{Not_Assigned} (Unicode 屬性) |
YES | no | no | YES | no | no | no | no | no | no | no | no | no | no | no |
\p{IsLetter} ~ \p{IsOther} (Unicode 屬性) |
YES | no | no | YES | no | no | no | no | no | no | no | no | no | no | no |
\p{IsLowercase_Letter} ~ \p{IsNot_Assigned} (Unicode 屬性) |
YES | no | no | YES | no | no | no | no | no | no | no | no | no | no | no |
\p{Arabic} ~ \p{Yi} (Unicode 腳本) |
YES | no | no | YES | option | no | no | no | no | no | no | no | no | no | no |
\p{IsArabic} ~ \p{IsYi} (Unicode 腳本) |
YES | no | no | YES | no | no | no | no | no | no | no | no | no | no | no |
\p{BasicLatin} ~ \p{Specials} (Unicode 區塊) |
YES | no | no | YES | no | no | no | no | no | no | no | no | no | no | no |
\p{InBasicLatin} ~ \p{InSpecials} (Unicode 區塊) |
YES | no | YES | YES | no | no | no | no | no | no | no | no | no | no | no |
\p{IsBasicLatin} ~ \p{IsSpecials} (Unicode 區塊) |
YES | YES | no | YES | no | no | no | no | no | no | no | no | no | YES | YES |
上方 {} 中的內容忽略大小寫 |
YES | no | no | YES | no | no | no | no | no | no | no | no | no | no | no |
上方語法中長名稱允許空格,邊字符,下劃線 (如 BasicLatin 可寫爲 Basic-Latin 或 Basic_Latin 或 Basic Latin ) |
YES | no | Java 5 | YES | no | no | no | no | no | no | no | no | no | no | no |
\P 上方所有 \p 的反義 |
YES | YES | YES | YES | option | no | no | no | no | no | no | no | no | YES | YES |
\p{^...} 上方所有 \p{...} 的反義 |
YES | no | no | YES | option | no | no | no | no | no | no | no | no | no | no |
命名捕獲與後向引用 | |||||||||||||||
特性 | JGsoft | .NET | Java | Perl | PCRE | JS | Python | Ruby | Tcl ARE | POSIX BRE | POSIX ERE | GNU BRE | GNU ERE | XML | XPath |
(?<name>regex) .Net 風格的命名捕獲分組 |
YES | YES | no | no | no | no | no | no | no | no | no | no | no | no | no |
(?'name'regex) .Net 風格的命名捕獲分組 |
YES | YES | no | no | no | no | no | no | no | no | no | no | no | no | no |
\k<name> .Net 風格的命名後向引用 |
YES | YES | no | no | no | no | no | no | no | no | no | no | no | no | no |
\k'name' .Net 風格的命名後向引用 |
YES | YES | no | no | no | no | no | no | no | no | no | no | no | no | no |
(?P<name>regex) Python 風格的命名捕獲分組 |
YES | no | no | no | YES | no | YES | no | no | no | no | no | no | no | no |
(?P=name) Python 風格的命名後向引用 |
YES | no | no | no | YES | no | YES | no | no | no | no | no | no | no | no |
多個捕獲組同名 | YES | YES | n/a | n/a | no | n/a | no | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
XML 字符類 | |||||||||||||||
特性 | JGsoft | .NET | Java | Perl | PCRE | JS | Python | Ruby | Tcl ARE | POSIX BRE | POSIX ERE | GNU BRE | GNU ERE | XML | XPath |
\i , \I , \c , \C XML 名稱字符類 |
no | no | no | no | no | no | no | no | no | no | no | no | no | YES | YES |
[abc-[abc]] 字符類差集 |
YES | 2.0 | no | no | no | no | no | no | no | no | no | no | no | YES | YES |
POSIX 方括號表達式 | |||||||||||||||
特性 | JGsoft | .NET | Java | Perl | PCRE | JS | Python | Ruby | Tcl ARE | POSIX BRE | POSIX ERE | GNU BRE | GNU ERE | XML | XPath |
[:alpha:] POSIX 字符類 |
YES | no | no | YES | ascii | no | no | YES | YES | YES | YES | YES | YES | no | no |
\p{Alpha} POSIX 字符類 |
YES | no | ascii | no | no | no | no | no | no | no | no | no | no | no | no |
\p{IsAlpha} POSIX 字符類 |
YES | no | no | YES | no | no | no | no | no | no | no | no | no | no | no |
[.span-ll.] POSIX 排序序列 |
no | no | no | no | no | no | no | no | YES | YES | YES | YES | YES | no | no |
[=x=] POSIX 等值字符 |
no | no | no | no | no | no | no | no | YES | YES | YES | YES | YES | no | no |