文档章节

正则表达式

l
 liuzhihe
发布于 2016/12/07 14:45
字数 995
阅读 4
收藏 0

1:什么事正则表达式

    正则表达式是一种特殊的字符串模式,用于匹配一组字符串

2:正则表达式简单介绍

    2.1:元字符介绍

        "^" :^会匹配行或者字符串起始位置

        “$”:$会匹配行或者字符串的结尾位置

        "\b":常用与匹配单词的边界不会消耗(代表)任何字符“This is Reg” 正则\bis\b会匹配到is不会匹配两边的空格       

        " \d":匹配数字

        "\w":匹配字母,数字,下划线

        "\s":匹配空格

        ".":匹配除换行符以外的任何字符

        "[]":自定义匹配元素集合,将匹配[]里面定义的元素集合,如[abc]表示匹配 a或b或c,[a-z]表示匹配a-z的字母

    2.2反义匹配

        将小写换为大写刚好意思表示相反

        “\D”:表示匹配非数字的字符

        “\W”:表示匹配非字母数字下划线字符

        “\S”:表示匹配费空格的字符

        “\B”:表示匹配非单词开头和结尾的者位置

        “[^]”:表示匹配非自定义元素的字符 如:[^abc]表示匹配不是a或b或c的任意字符

    2.3懒惰次数限定符

        “*”:表示前一字符重复零次或者多次及前一字符出现>=0次

        “+”:表示前一字符重复一次或者多次及前一字符出现>=1次

        “?”:表示前一字符出现零次或者一次

        "{n}":表示前一字符出现n次

        “{n,m}:”表示前一字符出现n到m次

        “{n,}”:表示前一字符出现n次或以上

    2.4 贪婪

        贪婪贪心如*会首先匹配整个字符串,尝试匹配时会选定尽可能多的内容,如果失败会回退一个字符,直到匹配到内容或者没有字符可以回退

  如:a*b匹配字符串ahjhjhbjkjkjkjkjajkjkjkjbkjkjkjkjkjkjauiuiuiuijjkhb 匹配结果为ahjhjhbjkjkjkjkjajkjkjkjbkjkjkjkjkjkjauiuiuiuijjkhb而不是ahjhjhb  ajkjkjkjb  auiuiuiuijjkhb三个结果原因就在于正则匹配为懒惰模式 如果相匹配出来三个结果方法见2.5懒惰限定符或者后面的模式修正符

    2.5懒惰限定符

        “*?”:重复人依稀但每次尽可能的少

        如“”a*b匹配字符串ahjhjhbjkjkjkjkjajkjkjkjbkjkjkjkjkjkjauiuiuiuijjkhb 匹配结果为ahjhjhb  ajkjkjkjb  auiuiuiuijjkhb三个

        “+?”:复1次或更多次,但尽可能少重复使用结果同“*?”

        "??"  重复0次或1次,但尽可能少重复

        如正则a.??b匹配aaaacb结果为acb

        "{n,m}?"  重复n到m次,但尽可能少重复

        如正则a{1,5}?匹配aaaaaa结果为空

        "{n,}?"    重复n次以上,但尽可能少重复

        如:a{1,}?匹配aaaaaaa结果为7个a

    2.6捕获分组

        捕获分组的概念:捕获分组就是一个括号内的内容,“(\d)而"(\d)" 这就是一个捕获分组,可以对捕获分组进行 后向引用 (如果后而有相同的内容则可以直接引用前面定义的捕获组,以简化表达式)如(\d)\d\1 这里的"\1"就是对"(\d)"的后向引用那捕获分组有什么用呢看个例子就知道了。

        如:“hello hello” 正则 \b(\w+)\b\s\1\b 所以这里的"\1"所捕获到的字符是(\w+)匹配的结果"hello" 匹配结果为hello hello  若匹配“hello hell1”则匹配不成功

     “\b(?<name>\w+)\b\s\k<name>\b”用“?<name>”就可以自定义组名向后引用 后面使用"\k<name>"表示对前面的引用,而后捕获组中匹配的值就会保存到自定义的组名中       

        捕获分组的用法

        “(exp)”:匹配exp并将捕获的文本自动命名组里面

        "(?<name>exp)":匹配exp将结果到名称name组里面

        "(?:exp)":匹配exp但不给出分组的组号

        "(?=exp)":匹配exp前面的位置

        "(?<=exp)":匹配exp后面的位置

        "(?!exp)":匹配后面跟的不是exp的位置

        "(?<!)":匹配前面不是exp的位置

© 著作权归作者所有

共有 人打赏支持
l
粉丝 0
博文 25
码字总数 8731
作品 0

暂无文章

Coding and Paper Letter(三十七)

资源整理。 1 Coding: 1.GDAL的node.js版本。 node gdal 2.R语言包echor,下载EPA许可设施的废水排放和空气排放数据。 echor 3.CPPTRAJ是一个旨在处理和分析分子动力学轨迹和从其分析中得出的...

胖胖雕
26分钟前
2
0
plsql developer如何创建新用户(users)

plsql developer如何创建新用户(users) 2017年05月04日 21:51:43 Alan_ZhQ 阅读数:14558 标签: plsql developer 更多 个人分类: plsql developer 版权声明:本文为博主原创文章,转载请...

linjin200
28分钟前
1
0
php安装编译时错误合集

php安装编译时错误合集 出现collect2: ld returned 1 exit status make: *** [sapi/cli/php] Error 1 出现此种错误最大可能是配置时出现了错误 libxml默认安装的路径是/usr/local,我把--wit...

alt_tab_jj
30分钟前
1
0
7.09-js保留小数点后两位

//num 是传过来的值,del是要保留几位 function valueFmt(num, del) { if (num != '') { if (del != 0) { num = parseFloat(num).toFixed(del); } var source = String(num).split("."); so......

静以修身2025
32分钟前
2
0
正则介绍_grep

10月16日任务 9.1 正则介绍_grep上 9.2 grep中 9.3 grep下 grep基本用法 grep [-cinvABC] 'word' filename centos7.x版本的grep实则为grep --color=auto -c 显示匹配到的行数 [root@localhos......

robertt15
41分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部