Regex 我不知道’;我得不到正则表达式

Regex 我不知道’;我得不到正则表达式,regex,Regex,我不理解或不认为需要正则表达式 一些人可以用简单的术语解释它们,并提供一些基本的例子,说明它们可能是有用的,甚至是关键的。正则表达式的用途: 正则表达式本身就是一种允许您对字符串输入执行复杂验证的语言。也就是说,你给它传递一个字符串,如果匹配与否,它将返回true或false 正则表达式的使用方法: 表单验证,确定用户输入的格式是否符合您的要求 在文本块中查找某个图案的位置 搜索和替换,其中搜索词是正则表达式,替换的是普通字符串 一些正则表达式语言功能: 交替:允许您选择一件事或另一件事。

我不理解或不认为需要正则表达式


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

正则表达式的用途:

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

正则表达式的使用方法:

  • 表单验证,确定用户输入的格式是否符合您的要求
  • 在文本块中查找某个图案的位置
  • 搜索和替换,其中搜索词是正则表达式,替换的是普通字符串
一些正则表达式语言功能:

  • 交替:允许您选择一件事或另一件事。示例仅匹配“是”或“否”

    是|不是

  • 分组:您可以使用括号定义范围和优先级。例如,匹配3种颜色

    gr(a | e)y |黑|白

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

    (0 | 1)+

为什么使用正则表达式?

正则表达式使匹配字符串变得容易,它通常可以用一个简单的小正则表达式字符串替换几十行源代码

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

要理解某件东西是如何有用的,你也应该理解它是如何无用的。正则表达式对于某些任务是不好的,例如,当您需要保证字符串的括号数相等时

几乎所有语言均可使用:

正则表达式几乎可以在任何编程语言中使用

正式语言:

任何正则表达式都可以转换为确定性有限状态机。通过同样的方法,您可以找出如何生成验证正则表达式的源代码

示例:

[hc]+at 
匹配“hat”、“cat”、“hhat”、“chat”、“hcat”、“ccchat”等,但不匹配“at”


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

  • 任意字母A-Z,大写或小写,5或6次
  • 3位数
  • 一个字母a-z(绝对小写)
(邮政编码、信用卡、社会保险号码验证等都会出现这种情况。)

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

这里的模式是这样的

[A-Za-z]{5,6}[0-9]{3}[a-z]
(还有其他的表达方式。)分组结构使匹配整个模式和获取(或替换)不同的模式位变得容易

但也有一些缺点:

  • 正则表达式很快就会变得复杂和难以阅读。彻底记录
  • 不同的正则表达式引擎之间的行为存在差异
  • 如果你不是专家(我当然不是!),复杂性可能很难判断;有一些“陷阱”可以使模式在特定输入下变得非常缓慢,而这些陷阱一点也不明显
  • 有些人大量过度使用正则表达式(当然,有些人使用不足)。我见过的最糟糕的例子是有人问(在C#组中)如何检查字符串的长度是否为3-这显然是使用string.length的工作,但有人认真地建议匹配正则表达式。疯狂。(他们也把正则表达式搞错了,这在某种程度上证明了这一点。)
  • 正则表达式使用反斜杠来转义各种事物(例如,使用.来表示“一个点”,而不仅仅是“任何字符”。在许多语言中,反斜杠本身需要转义

它们有点棘手,但功能非常强大,值得学习。web上充满了教程和示例,例如从示例开始并查看示例。

它们看起来有点神秘,但它们为查找文本中的模式提供了非常强大的工具。从HTML页面中的
href
标记到验证em所有地址


它们可以被处理成一个非常高效的数据结构(FSA),可以非常快速地找到匹配项。

给你一些例子:

  • 电子邮件地址

  • 密码至少需要1个字母和1个数字

  • 你怎样才能达到这些要求

  • 最好的方法是使用正则表达式

阅读以下链接了解更多信息:

如何:在ASP.NET中使用正则表达式约束输入

每当您在大量文本数据中找到某种模式时,或者如果您想检查字符串是否采用某种格式时

例如电子邮件地址

检查at符号和有效域的代码看起来相当大,您可以使用正则表达式,并在两行代码中找到答案

Regex r = new Regex("<An Email Address Regex>");
bool isValidEmail = r.IsMatch(MyInput);
Regex r=newregex(“”);
bool-isValidEmail=r.IsMatch(MyInput);

其他示例是在将数字解析为整数等之前检查其格式是否正确。

正则表达式是指定大多数模式匹配和替换问题的一种非常简洁的方法,并且regexp引擎可以进行高度优化

如果您想做与相对简单的regexp相同的工作,那么就必须编写大量代码,这些代码可能包含许多bug,很难理解
my_versioned_file_(\d{4}-\d{2}-\d{2}).txt
abstract\s+class\s+\w+\s+extends\s+TestCase
 ps -e | grep -e " sh| bash"