跳转至内容

计算理论:正则表达式

来自维基教科书,开放的书籍,开放的世界

论文 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 中更详细地介绍正则表达式。

华夏公益教科书