Software Development - 正則表達式風味(引擎)對比

分享一個大牛的人工智能教程。零基礎!通俗易懂!風趣幽默!希望你也加入到人工智能的隊伍中來!請點擊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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章