美文网首页Web 前端开发
让你少写代码的工具--正则表达式

让你少写代码的工具--正则表达式

作者: Yeaseon | 来源:发表于2016-08-23 23:02 被阅读127次
    文 | Yeaseon

    什么是正则表达式

    在编写处理字符串的程序或者网页时,经常会有查找符合某些复杂规则的需要。正则表达式就是描述这些规则的工具。
    下面就将我这几天总结的一些知识点,分享给大家吧!

    元字符

    语法 说明
    . 匹配除换行符以外的任意字符
    \w 匹配字母、数字、下划线或汉字
    \s 匹配任意的空白符
    \d 匹配数字
    \b 匹配单词的开始或结束
    ^ 匹配字符串的开始
    $ 匹配字符串的结束

    字符转义

    如果想要查找元字符本身,这时候就需要使用\来取消这些字符的特殊意义。 例如: google\.com匹配 google.comC:\\Windows 匹配 C:\Windows

    重复

    语法 说明
    * 重复任意次(可能为0)
    + 重复一次或更多次
    重复零次或一次
    {n} 重复n次
    {n,} 重复n次或更多次
    {n,m} 重复n到m次

    字符类

    有时候我们需要匹配一些字符集合,应该怎么办?

    很简单,我们需要在[]里列出它们就好,像[aeiou]就匹配任何一个英文原因字母

    我们也可以轻松指定一个字符范围,像[0-9]代表的含义与\d就是完全一致的:任意一个数字。

    分枝条件

    正则表达式里的分枝条件指的是有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用|把不同的规则分隔开。

    0\d{2}-\d{8}|0\d{3}-\d{7}这个表达式能匹配两种以连字符分隔的电话号码:一种是三位区号,8位本地号(010-12345678),另一种是4位区号,7位本地号(0376-1234567)。

    分组

    如果需要重复多个字符,可以使用()来指定子表达式(也叫做分组),然后你就可以指定这个子表达式进行其他一些操作。

    (\d{1,3}\.){3}\d{1,3}是一个简单的IP地址匹配表达式。来按顺序分析一下:\d{1,3}匹配1到3个数字,(\d{1,3}\.)匹配1到3个数字加上一个.这个整体重复3次,最后再加上一个1到3位的数字。

    反义

    语法 说明
    \W 匹配任意不是字母、数字、下划线或者汉字的字符
    \S 匹配任意不是空白符的字符
    \D 匹配任意非数字的字符
    \B 匹配不是单词开头或结束的位置
    [^x] 匹配除了x以外的任意字符
    [^aeiou] 匹配除了aeiou这几个字母以外的任意字符

    例子:

    • \S+ 匹配不包含空白符的字符串
    • <a[^>]+> 匹配<>括起来以a开头的字符串

    向后引用

    在分组之后,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。

    向后引用用于重复搜索前面某个分组匹配的文本。例如,\1代表分组1匹配的文本。

    \b(\w+)\b\s+\1可以用来匹配重复的单词,像 go go或者 ha ha。
    这个表达式可以分为几个部分:
    第一部分就是\b(\w+)\b,在单词开始和结束之间有多于一个的字母和数字,这个单词就会被捕获到编号为1的分组中。
    第二部分就是\s+,一个或者几个空白字符。
    最后一部分就是\1,分组1中捕获的内容。

    可能在分组组号上并不是那么人性化,我们也可以自定义子表达式的组名,指定组名的语法(?<Word>\w+)或者(?'Word'\w+),这样就可以把\w+的组名指定为Word了,要反向引用这个分组捕获的内容,也可以使用\k<Word>,所以上一个例子也可以写成\b(?<Word>\w+)\b\s+\k<Word>\b

    语法 说明
    (exp) 匹配exp,并捕获文本到自动命名的组里
    (?<name>exp) 匹配exp,并捕获文本到名称为name的分组里
    ?:exp 匹配exp,不捕获匹配的文本,也不给此分组分配组号

    捕获分组常用语法

    语法 说明
    (exp) 匹配exp,并捕获文本到自动命名的组里
    (?<name>exp) 匹配exp,并捕获文本到名称为name的分组里
    ?:exp 匹配exp,不捕获匹配的文本,也不给此分组分配组号

    以上就是我最近学习到的一些关于正则表达式的知识点,再有新的收获会更新此文章,感谢你的耐心观看。

    喜欢这篇文章请点赞或收藏,如果想看到我的更多的文章,请关注我_

    相关文章

      网友评论

        本文标题:让你少写代码的工具--正则表达式

        本文链接:https://www.haomeiwen.com/subject/pipnsttx.html