正則表示式/語法
外觀
正則表示式有幾種變體。這些變體不僅在具體語法上有所不同,而且在功能上也有所不同。支援正則表示式的各個工具也有其自身的特點。
- 簡單正則表示式 - 廣泛用於向後相容,但在 POSIX 相容系統上已棄用。
- 基本正則表示式 - 由一些 Unix shell 工具使用
- Perl 相容正則表示式 - 由 Perl 和一些應用程式使用
- POSIX 基本正則表示式 - 為實用程式之間的一致性提供擴充套件。這些擴充套件不受某些傳統 Unix 工具實現的支援。
- POSIX 擴充套件正則表示式 - 可透過 -E 命令列開關由一些 Unix 實用程式支援
- 非 POSIX 基本正則表示式 - 提供 POSIX 不支援的附加字元類
- Emacs 正則表示式 - 由 Emacs 編輯器使用
- Shell 正則表示式 - 用於模式匹配和檔名替換的有限形式的正則表示式
諸如 * 和 + 之類的量詞儘可能多地匹配:它們是貪婪的。對於某些用途,它們的貪婪程度並不合適。例如,假設你想在以下文字中找到第一個用引號括起來的字串
- 這些詞包括“cat”、“mat”和“pat”。
模式 ".*" 匹配下面文字的斜體部分,即 "cat","mat",和 "pat" 而不是所需的 "cat"
- 這些詞包括 "cat","mat",和 "pat"。
為了解決這個問題,某些版本的正則表示式提供了非貪婪運算子,例如 *?、+? 和 }?。在 PHP 中,在正則表示式末尾新增“U”會使量詞非貪婪,如 /".*"/U。在不支援上述兩種選項的版本中,你可以指定 不 要匹配的內容,如 ("[^"]*") 來解決討論的示例。但是,在處理帶括號的表示式時,(\[\[[^\]]*\]\]) 無法匹配 A B C [[D E] F G]]。
一個比較表或矩陣,顯示了哪些功能或版本的正則表示式在哪些工具或程式語言中可用,可以從 regular-expressions.info 獲得。