Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 学习正则表达式_Regex - Fatal编程技术网

Regex 学习正则表达式

Regex 学习正则表达式,regex,Regex,我不太懂正则表达式。你能用简单易懂的方式给我解释一下吗?如果有任何在线工具或书籍,您也可以链接到它们吗?最重要的部分是概念。一旦您了解了构建块的工作原理,语法上的差异只不过是温和的方言。正则表达式引擎语法之上的一层是您正在使用的编程语言的语法。Perl之类的语言消除了大部分这种复杂性,但如果在C程序中使用正则表达式,则必须记住其他注意事项 如果您认为正则表达式是可以随意混合和匹配的构建块,那么它可以帮助您学习如何编写和调试自己的模式,以及如何理解他人编写的模式 从简单开始 从概念上讲,最简单的正

我不太懂正则表达式。你能用简单易懂的方式给我解释一下吗?如果有任何在线工具或书籍,您也可以链接到它们吗?

最重要的部分是概念。一旦您了解了构建块的工作原理,语法上的差异只不过是温和的方言。正则表达式引擎语法之上的一层是您正在使用的编程语言的语法。Perl之类的语言消除了大部分这种复杂性,但如果在C程序中使用正则表达式,则必须记住其他注意事项

如果您认为正则表达式是可以随意混合和匹配的构建块,那么它可以帮助您学习如何编写和调试自己的模式,以及如何理解他人编写的模式

从简单开始 从概念上讲,最简单的正则表达式是文字字符。模式N与字符“N”匹配

相邻的正则表达式匹配序列。例如,模式尼克匹配序列“N”,后跟“i”,后跟“c”,后跟“k”

如果您曾经在Unix上使用过grep,即使只是搜索外观普通的字符串,您已经在使用正则表达式了!grep中的re指的是正则表达式

从菜单上点菜 只需增加一点复杂性,就可以将“Nick”或“Nick”与模式[Nn]ick匹配。方括号中的部分是字符类,这意味着它正好匹配一个封闭字符。您还可以在字符类中使用范围,因此[a-c]匹配“a”或“b”或“c”

模式。特殊:它与任何字符†匹配,而不是仅匹配文字点。它在概念上与真正的大字符类[-.?+%$A-Za-z0-9…]相同

将角色类视为菜单:只选择一个

有用的捷径 使用。可以为您节省大量的输入,并且还有其他常见模式的快捷方式。假设您想要匹配一个数字:一种写入方式是[0-9]。数字是经常匹配的目标,因此您可以使用快捷方式\d。其他是\s空格和\w单词字符:字母数字或下划线

大写的变体是它们的补码,因此\S匹配任何非空白字符,例如

一次是不够的 从那里,你可以用量词重复你的部分模式。例如,模式ab?c与“abc”或“ac”匹配,因为?量词使它修改的子模式成为可选的。其他量词是

*零次或多次 +一次或多次 {n} 正好n次 {n,}至少n次 {n,m}至少n次但不超过m次 将这些块放在一起,模式[Nn]*ick将匹配所有这些块

艾克 刻痕 刻痕 安尼克 安尼克 安尼克 等等 第一场比赛展示了一个重要的教训:*永远成功!任何模式都可以匹配零次

其他几个有用的例子:

[0-9]+及其等价项\d+匹配任何非负整数 \d{4}-\d{2}-\d{2}匹配格式类似2019-01-01的日期 分组 量词将模式修改为其最左侧。您可能期望0abc+0与“0abc0”、“0abcabc0”等匹配,但加号量词左侧的模式是c。这意味着0abc+0与“0abc0”、“0abcc0”、“0abccc0”等匹配

要将一个或多个“abc”序列与末端的零匹配,请使用0abc+0。括号表示可以量化为一个单位的子模式。正则表达式引擎保存或捕获与括号组匹配的输入文本部分也是很常见的。这种方法提取比特比计算索引和substr更灵活,更不容易出错

交替 早些时候,我们看到了一种匹配“尼克”或“尼克”的方法。另一种是像尼克|尼克那样的交替。记住,交替包括其左侧的所有内容和右侧的所有内容。使用分组括号限制|的范围,例如Nick | Nick

例如,您可以将[a-c]等效为a | b | c,但这可能是次优的,因为许多实现假设备选方案的长度大于1

逃逸 虽然有些字符与自己匹配,但有些字符有特殊的含义。模式\d+与反斜杠后跟小写字母d后跟加号不匹配:为此,我们使用\\d\+。反斜杠删除以下字符的特殊含义

贪婪 正则表达式量词是贪婪的。这意味着它们尽可能多地匹配文本,同时允许整个模式成功匹配

例如,假设输入是

你好,她说,你好吗

你可能期望.+只匹配“Hello”,然后当你看到它从“Hello”一直匹配到“You?”,你会感到惊讶

要从贪婪转变为你认为的谨慎,请添加 额外的?对于量词。现在您了解\.+?\,您问题中的示例是如何工作的。它匹配文字左括号的序列,后跟一个或多个字符,并以右括号终止

如果您的输入是“123 456”,则第一次捕获将是“123”。非贪婪量词希望允许模式的其余部分尽快开始匹配

至于你的困惑,我不知道任何正则表达式方言在哪里?我也会这么做。我怀疑在沿途某处的传输过程中丢失了什么

锚定 使用特殊模式“^”仅在输入的开头匹配,$仅在输入的结尾匹配。用你的图案做书头,你说,我知道前面和后面是什么,但给我中间的一切是一种有用的技巧

假设您希望匹配表单的注释

-这是一个评论-

您将编写^-\s+.+\s+-$

建立你自己的 正则表达式是递归的,所以现在您已经了解了这些基本规则,可以任意组合它们

用于编写和调试正则表达式的工具: 对于JavaScript Perl: 发动机靠 对于JavaScript 对于PCRE、JavaScript、Python、Golang 对于.NET 为了Ruby 用于常见场景的预定义正则表达式 对于JavaScript 对于.NET 可视正则表达式测试器和助手 书 、和。 免费资源 PDF系列 脚注
†:上述声明。匹配任何字符都是出于教学目的而进行的简化,但严格说来并不正确。点匹配除换行符以外的任何字符,\n但实际上,您很少期望像.+这样的图案跨越换行符边界。例如,Perl正则表达式需要使用Java和Java。完全匹配任何字符。对于没有这种功能的语言,您可以使用[\s\s]之类的东西来匹配任何空白或非空白,换句话说,任何东西。

您也可以使用试错法,而遵循在线regex tester和debugger会有很大的帮助:值得一提的是,尽管是类似的模式,但是{,m}至少在Javascript、Perl和Python中,这不是一件容易的事情。值得一提的是,有不同类型的正则表达式引擎,它们都有不同的功能集和语法规则。是查找最佳在线正则表达式教程的好地方。这里的所有教程都是由编程社区提交并推荐的。这有助于快速参考: