博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
正则表达式后向引用
阅读量:6000 次
发布时间:2019-06-20

本文共 805 字,大约阅读时间需要 2 分钟。

使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其他程序中作进一步处理。默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。

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

我们也可以自己指定子表达式的组名。要指定一个子表达式的组名,需要按照以下的语法:(?<word>[regExp])或者(?'word'[regExp])。这样这个regExp 的组名就被指定为 word 了。要反向引用这个分组 捕获 的内容,就可以使用 \k<word> 或者 \k'word'

后向引用的原理是:当捕获组(Expression)在匹配成功时,会将子表达式匹配到的内容保存在内存中以一个数字编号或者自己命名为key的组里,这样就可以通过后向引用的方式引用匹配到的内容。

例子

  1. 匹配html标签

    `/<(\S+)[^>]*>(.*?)<\/\1/`

    `/<(?
    \S+)[^>]*>(.*?)<\/\k
    /`

    `/<(?'tag'\S+)[^>]*>(.*?)<\/\k'tag'/`第一个分组匹配标签名称,第二个分组匹配标签里面的内容,比如:`正则表达式`,第一个分组匹配`span`,第二个分组匹配`正则表达式`.
  2. 匹配重复的单词

    `/\b(\w+)\b\s+\1\b/`匹配重复出现的单词,比如:`go go kitty kitty test`,能够匹配到 `go go` 和 `kitty kitty`。
  3. 匹配连续出现两次的英文字符

    `/([a-zA-Z])\1/`匹配连续出现的单词,比如: `abaasdassdd`, 这样能够匹配 `aa`,`ss` 和 `dd`

转载地址:http://ygzmx.baihongyu.com/

你可能感兴趣的文章
如何在JDK1.8中愉快地处理日期和时间
查看>>
git日常命令
查看>>
找不到或无法加载主类(Could not find or load main class)
查看>>
maven资料
查看>>
VS2017 调试不能命中断点问题
查看>>
钉钉JSAPI前端鉴权
查看>>
jdbc,链接调用数据库的方法——例题
查看>>
网站异常了,日志要怎么看?
查看>>
12/11团队会议 9
查看>>
HTML5 Canvas 数据持久化存储之属性列表
查看>>
jersey 接口发布
查看>>
Spring 装配基础类型
查看>>
SSDT
查看>>
列表去重以及两列表相同元素以及不同元素
查看>>
iframe跨域访问
查看>>
Android中ActivityManagerService与应用程序(客户端)通信模型分析
查看>>
css样式float造成的浮动“塌陷”问题的解决办法
查看>>
浅谈:当程序员的N多好处,逆袭高富师
查看>>
JVM系列(四)生命周期和classloader
查看>>
http-equiv详解
查看>>