我没有得到正则表达式

Jlo*_*uro 9 regex

我不明白或看到正则表达式的需要.

有些人可以用简单的术语解释它们,并提供一些基本的例子,它们可能有用,甚至是关键的.

Jon*_*eet 30

在需要使用/操作模式的地方使用它们.例如,假设您需要识别以下模式:

  • 任何字母,AZ,大写或小写,5或6次
  • 3位数
  • 单个字母az(绝对是小写)

(像这样的东西用于邮政编码,信用卡,社会安全号码验证等)

这并不是很难用代码编写 - 但随着模式变得更复杂,它变得更难.使用正则表达式,您可以描述模式(而不是验证它的代码),并让正则表达式引擎为您完成工作.

这里的模式会是这样的

[A-Za-z]{5,6}[0-9]{3}[a-z]
Run Code Online (Sandbox Code Playgroud)

(还有其他表达方式.)分组结构使得匹配整个模式和获取(或替换)它的不同位变得容易.

但有一些缺点:

  • 正则表达式可能变得复杂且难以快速阅读.文件彻底!
  • 不同的正则表达式引擎之间的行为有所不同
  • 如果你不是专家(我当然不是!),很难判断复杂性; 有一些"陷阱"可以使模式对特定输入真的很慢,而且这些问题根本不明显
  • 有些人过度使用正则表达式(当然还有一些人不熟悉).我见过的最糟糕的例子是有人问(在C#组上)如何检查字符串是否为3 - 这显然是使用String.Length的工作,但有人认真建议匹配正则表达式.疯狂.(他们也得到了正则表达式错误,这有点证明了这一点.)
  • 正则表达式使用反斜杠来逃避各种事情(例如,使用.表示"一个点"而不仅仅是"任何字符".在许多语言中,反斜杠本身需要转义.


Bri*_*ndy 23

正则表达式用于:

正则表达式本身就是一种语言,允许您对字符串输入执行复杂的验证.即你传递一个字符串,如果是匹配则返回true或false.

如何使用正则表达式:

  • 表单验证,确定用户输入的是否是您想要的格式
  • 在一个文本块中查找某个模式的位置
  • 搜索和替换搜索词是正则表达式的位置以及要替换的是普通字符串.

一些正则表达式语言功能:

  • 轮换:允许您选择一件或另一件事.示例仅匹配是或否.

    是|否

  • 分组:您可以使用括号定义范围并具有优先级.例如匹配3色调.

    GR(A | E)Y |黑色|白色

  • 量化: 您可以量化您想要的东西量.?表示1或0,*表示0或更多.+表示至少一个.示例:接受非空的二进制字符串:

    (0 | 1)+

为什么正则表达式

正则表达式可以很容易地匹配字符串,它通常可以用简单的小正则表达式字符串替换几十行源代码.

不适用于所有类型的匹配:

要了解某些内容是如何有用的,您还应该了解它的用处.正则表达式对某些任务不利,例如,当您需要保证字符串具有相同数量的括号时.

提供几乎所有语言:

几乎任何编程语言都提供正则表达式.

形式语言:

任何正则表达式都可以转换为确定性有限状态机.以同样的方式,您可以弄清楚如何制作将验证正则表达式的源代码.

例:

[hc]+at 
Run Code Online (Sandbox Code Playgroud)

匹配"帽子","猫","hhat","聊天","hcat","ccchat"等,但不是"at"

来源,进一步阅读