跳轉至內容

計算理論:正則表示式

來自華夏公益教科書,開放的書籍,開放的世界

論文 1 - ⇑ 計算理論 ⇑

← 緊湊集合符號 正則表示式 巴科斯正規化 →


您通常希望檢查輸入字串的格式,如果格式不正確,您希望再次提交。例如,您可能希望有人輸入他們最好的朋友的名字,這意味著他們不應該輸入任何字母或空格,並且應該以大寫字母開頭

   程式碼輸出

最好的朋友姓名:Beanie //(正確)
最好的朋友姓名:jonny5 //(停止這個)

為此,我們可以將輸入字串與某些規則、正則表示式或正則表示式匹配,在本例中,我們只想要字母表中的字元

[A-Z][a-z]+

分解規則

  • [A-Z] - 從一個大寫字母開始
  • [a-z]+ - 後面跟著任意數量的小寫字母(這就是 + 的含義)

另一個例子可能是檢查著名作曲家的正確拼寫

"Handel", "Händel", and "Haendel"

我們可以使用模式 H(ä|ae?)ndel 檢查這一點。讓我們看看這意味著什麼

  • H - 以 H 開頭
  • (ä|ae?) - 包含一個 ä 或(| 符號)一個 a 後跟一個可選的 ee? 表示 e 是可選的)

大多數正則表示式工具提供以下操作來構建表示式。

布林“或”

一條豎線分隔備選方案。例如,gray|grey 可以匹配“gray”或“grey”。

分組

圓括號用於定義運算子的範圍和優先順序(除其他用途外)。例如,gray|greygr(a|e)y 是等效模式,它們都描述了“gray”和“grey”的集合。

量化

令牌(例如字元)或組後面的量詞指定前面元素允許出現的次數。

  • ? 問號表示前面元素存在零次或一次。例如,colou?r 匹配“color”和“colour”。
  • * 星號表示前面元素存在零次或多次。例如,ab*c 匹配“ac”、“abc”、“abbc”、“abbbc”等等。
  • + 加號表示前面元素存在一次或多次。例如,ab+c 匹配“abc”、“abbc”、“abbbc”等等,但不匹配“ac”。

大多數程式語言都有正則表示式函式。在 VB.NET 中,我們可以使用 Regex 例程使用正則表示式

' this code enforces the name rule from earlier
Dim name As String
Console.Write("Name of best friend: ")
name = Console.Readline()

' match the string against a regular expression
Dim m As Match = Regex.Match(name, "[A-Z][a-z]+")

If (m.Success) Then
    Console.WriteLine("You have input the name correctly")
Else
    Console.WriteLine("Incorrect format!")
End If

正則表示式的一個常見用途是檢查您是否擁有正確鍵入的電子郵件地址。它的規則如下:^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$

您可以在維基百科上了解有關正則表示式 的更多資訊,您將在 A2 中更詳細地介紹正則表示式。

華夏公益教科書