什么是正则表达式,以及如何使用它们?

大超

什么是正则表达式?

正则表达式是程序员用来搜索文本中某些字符的模式匹配标记。正则表达式可以搜索几乎任何东西,具体取决于你如何构造它们。程序员们都在使用它,因为它们对于帮助计算机快速排序数据,并过滤掉可能导致错误的无意义字符非常有价值。

正则表达式看起来很可怕,特别是对于非程序员。看看这个:

[a-zA-Z0-9_.+-]+@[a-zA-Z0-9_-]+.[a-zA-Z0-9_.-]+

实际上,它并没有那么糟糕,上面那个表达式匹配了电子邮件地址。正如您将看到的,表达式可以分解为单个字符,所有这些字符都告诉程序要查找的内容。正则表达式几乎是通用的。相同的一般语法适用于所有语言,此处和那里只有轻微的变化。大超小志的这篇文章包含Python和JavaScript以及普通旧正则表达式的示例。如果您使用其他语言,请不要担心。几乎所有内容都适用于您选择的语言。

正则表达式基础知识

从技术上讲,没有很多东西不能被认为是正则表达式,因为文本字符串非常简单。如果您使用“niuchao”作为正则表达式,编程语言将搜索该确切的字符串。第一个更动态的匹配字符是“.”字符。在此上下文中,点字符是通配符。如果您正在搜索它,您的程序将返回它找到的任何匹配字符。那么,如果你想寻找一个字符点怎么办?这也不难。如果要使用字符点,请在其前面添加反斜杠,如下所示:“.”。

反斜杠字符

不过,反斜杠在这里扮演了更多角色。大多数主要的正则表达式字符包括反斜杠。看一些例子:

d:从0到9的数字

w:“单词字符”字母,数字和下划线

s:空白字符,包括制表符,换行符和常规空格

如果您使用大写字母而不是其中任何一个,那么您将得到相反的结果。例如,“D”为您提供除数字之外的所有内容。

类 Class

反斜杠字符很好,但它们仍然有点僵硬。通常,您希望匹配字母,数字或一些特殊字符。将要匹配的字符放在一对方括号“[]”中,您的程序将匹配其中任何一个。这称为正则表达式类。

[abcd1234]

上面的例子仍然效率低下。相反,您可以使用短划线指定范围。 例如,所有小写字母:

[a-z]

您也可以列出范围。以下表达式匹配所有字母和数字:

[a-zA-Z0-9]

如果您要在字符集中包含短划线,请在最后添加它以防止对其进行评估。它也适用于其他特殊字符。

[a-zA-Z0-9_.+-]

与反斜杠字符一样,您也可以在此处得到相反的结果。在类开头放置一个“^”,将其从结果中排除。这将从结果中排除数字和几个特殊字符:

[^0-9_+.-]

组 Group

组使用一组括号来分隔表达式。他们对数据进行分组,允许您的程序定位并使用它。当程序从Web地址中剥离“http://”时,它正在使用正则表达式组来完成该操作。正则表达式允许它以某些标准为目标,并且组允许它将各个部分分开。

组还允许您在一种模式或另一种模式之间进行选择。他们使用一个“|”在表达中充当“或”。下面的表达式将匹配以下任何一个:.com,.org,.net,.edu或.gov。

.(com|org|net|edu|gov)

量词

量词正是他们听起来的样子。他们告诉表达你正在寻找的角色的数量。这些是可用的量词:

*:零或更多

+:一个或多个

?:零或一

{3}:括号中的金额

将任何这些量词放在要指定数量的字符或类的末尾。此示例查找标准的八位数电话号码:

d{3}[.*-]d{3}[.*-]d{4}

锚和边界

正则表达式允许您根据文本字符串或单词周围的位置搜索模式。主要用的有这些:

^:字符串的开头

$:字符串的结尾

\b:单词边界(单词的开头或结尾)

如果您只想查找以字母开头的字符串,可以尝试:

^[a-zA-Z]

假设您只想找到“it”这个词,而不是包含字母I和T的单词,这就是你使用单词边界的地方。

\b(i|I)t\b

正则表达式可以在编程时为您省去大量麻烦。想象一下,尝试编写逻辑来完成本文中的任何示例。这将是一个让人烦恼的事情。一旦你对它们感到满意,你可能会发现自己真的很享受正则表达式的强大功能和灵活性。希望能帮助你,也请多多支持本站,谢谢!

有问题可在下方评论留言,或关注“大超小志”微信公众号留言。

标签: javascript Python 正则表达式

留言评论

如需留言或评论,请在微信中打开此页面。