Can you summarize the following document?
        
  英語:Regular Expression的英語:Regular一般被譯為正則、正規或常規。

  最初的正規表示式出現於理論電腦科學的自動控制理論和形式化語言理論中。在這些領域中有對計算(自動控制)的模型和對形式化語言描述與分類的研究。  1940年,沃倫·麥卡洛克與Walter Pitts將神經系統中的神經元描述成小而簡單的自動控制元。  1950年代,數學家斯蒂芬·科爾·克萊尼利用稱之為「正則集合」的數學符號來描述此模型。肯·湯普遜將此符號系統引入編輯器QED (文字編輯器),隨後是Unix上的編輯器ed,並最終引入grep。自此以後,正規表示式被廣泛地應用於各種英語:Unix或類Unix系統的工具中。正規表示式的英語:POSIX規範,分為基本型正規表示式(英語:Basic Regular Expression,英語:BRE)和擴充套件型正規表示式(英語:Extended Regular Express,英語:ERE)兩大流派。在相容英語:POSIX的英語:UNIX系統上,英語:grep和英語:egrep之類的工具都遵循英語:POSIX規範,一些資料庫系統中的正規表示式也符合英語:POSIX規範。英語:grep、英語:vi、英語:sed都屬於英語:BRE,是歷史最早的正規表示式,因此元字元必須轉譯之後才具有特殊含義。英語:egrep、英語:awk則屬於英語:ERE,元字元不用轉譯  英語:Perl的正規表示式源自於Henry Spencer於1986年1月19日釋出的英語:regex,它已經演化成了英語:PCRE(英語:Perl相容正規表示式,Perl Compatible Regular Expressions),一個由Philip Hazel開發的,為很多現代工具所使用的庫。  各程式語言之間關於正規表示式的整合,目前開發進展得很差。英語:Perl6的子專案英語:Apocalypse的設計中已考慮到了這點。

  正規表示式可以用形式化語言理論的方式來表達。正規表示式由常量和運算元組成,它們分別表示字串的集合和在這些集合上的運算。給定有限字母表Σ定義了下列常量:  定義了下列運算:  上述常量和運算元形成了克萊尼代數。  很多課本使用對選擇使用符號formula_22、formula_23或formula_24替代豎線。  為了避免括號,假定英語:Kleene星號有最高優先順序,接著是串接,接著是並集。如果沒有歧義則可以省略括號。例如:codice_1可以寫為codice_2而codice_3可以寫為codice_4。  例子:  為了使表示式更簡潔,正規表示式也定義了codice_8和codice_9;codice_10等於codice_11,表示a出現至少一次;而codice_12等於codice_13,表示a出現1次或不出現。有的定義中增加了補運算元formula_28;formula_29表示在formula_30上但不在formula_14中的所有字串的集合。補運算元在理論上並非必要,因為它可以使用其他運算元來表達,但它可以使一些表示式變得更加簡潔。  這種意義上的正規表示式可以表達正則語言,是可被有限狀態自動機精確接受的語言類。但是在簡潔性上有重要區別。某類正則語言只能用大小指數增長的自動機來描述,而要求的正規表示式的長度只線性的增長。  正規表示式對應於喬姆斯基層級的型別-3文法。但通常程式語言或其相關庫(例如PCRE)中實現的正規表示式的表達能力是喬姆斯基層級中型別-3文法的超集。在另一方面,在正規表示式和不導致這種大小上的爆炸的非確定有限狀態自動機(英語:NFA)之間有簡單的對映;為此英語:NFA經常被用作正規表示式的替表示式。  這種形式化中存在著冗餘,典型的體現是存在不同的正規表示式可以表達同樣的語言。有可能對兩個給定正規表示式寫一個演算法來判定它們所描述的語言是否本質上相等,即簡約每個表示式到極小確定有限自動機,確定它們是否同構(等價)。這種冗餘可以消減到什麼程度?我們可以找到仍有完全表達力的正規表示式的有趣的子集嗎?這提出了一個令人驚奇的困難問題。Kleene星號和並集明顯是需要的,但是我們或許可以限制它們的使用。由於正規表示式如此簡單,沒有辦法在語法上把它重寫成某種規範形式。過去公理化的缺乏導致了。最近英語:Dexter Kozen用克萊尼代數公理化了正規表示式。  很多現實世界的“正規表示式”引擎實現了不能用正規表示式代數表達的特徵。

  一個正規表示式通常被稱為一個模式(英語:pattern),為用來描述或者匹配一系列符合某個句法規則的字串。例如:Handel、Händel和Haendel這三個字串,都可以由codice_14這個模式來描述。大部分正規表示式的形式都有如下的結構:

  某個字元後的數量限定符用來限定前面這個字元允許出現的個數。最常見的數量限定符包括codice_9、codice_8和codice_19(不加數量限定則代表出現一次且僅出現一次):

  上述這些構造子都可以自由組合,因此codice_30和codice_31是相同的,表示{"Handel", "Haendel", "Händel"}。  精確的語法可能因不同的工具或程式而異。

  正規表示式有多種不同的風格。下表是在PCRE中元字元及其在正規表示式上下文中的行為的一個完整列表,適用於英語:Perl或者英語:Python程式語言(英語:grep或者英語:egrep的正規表示式文法是英語:PCRE的子集):

  (以下使用PHP語言) <?php $str = 'a1234'; if (preg_match("/^[a-zA-Z0-9]{4,16}$/", $str)) { } else {?>  <?php $str = 'a1234'; if (preg_match("/^[A-Za-z]\d{9}$/", $str)) { } else {?> (以下使用Perl語言) print $str = "a1234" =~ m:^[a-zA-Z0-9]{4,16}$:? "CONFIRM" : "FAILED";  print $str = "a1234" =~ m"^\w[12]\d{8}$"? "CONFIRM" : "INVALID";  (以下使用python3語言)使用正則表示式匹配ip地址: import re s=' 192.137.1.336 192.168.1.137.123 192.168.1.138'print(re.findall(r'(?<![\.\d])(?:25[0-5]\.|2[0-4]\d\.|[01]?\d\d?\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)(?![\.\d])',s))
正規表示式(英語:Regular Expression,常簡寫為英語:regex、英語:regexp或英語:RE),又稱正規表示式、正規表示法、規則運算式、常規表示法,是電腦科學的一個概念。正規表示式使用單個字串來描述、匹配一系列符合某個句法規則的字串。在很多文字編輯器裡,正規表示式通常被用來檢索、替換那些符合某個模式的文字。