1、查询一个字符串的重复

回溯引用指的是模式的后半部分引用在前半部分中定义的子表达式。 可以把回溯引用想象成变量。

回溯引用只能用来引用模式里的子表达式,用(和)括起来的正则表达式片段

This is a block of of text,several words here are are repeated,and and they should not be正则表达式:[ ]+(\w+)[ ]+\1
匹配结果:共找到2处匹配
of of
are are

[ ]+匹配一个或多个空格,
\w+匹配一个或多个字母数字下划线字符,等价于[a-zA-Z0-9_]+
(\w+)是一个子表达式,这个子表达式不是用来进行重复匹配的,只是把整个模式的一部分单独划分出来以便在后面引用。
\1这是一个回溯引用,而它引用的正是前面划分出来的子表达式(即子表达式:(\w+)  )。
\1到底代表什么,它代表着模式里的第一个子表达式,\2代表着模式里的第二个子表达式,\3代表着模式里的第三个子表达式;以此类推。
[ ]+(\w+)[ ]+\1将匹配同一个单词的连续两次重复出现,而且前面一个是一个单独的词,至少前面有一个空格
正则表达式(\w+)[ ]+\1匹配结果:共找到4处匹配is isof of are areand and

2、html标签开始与结束的匹配(忽略任何不配对的标签组合)

<BODY>
<H1>welcome to my Homepage</H1>
Content is divided into two sections:<BR>
<H2>ColdFusion</H2>
Information about Macromedia ColdFusion.
<H2>wireless</H2>
information about Bluetooth,802.11,and more .
<H2>This is not valid HTML</H3>
</BODY>

正则表达式:<H([1-6])>.*?</H\1>

匹配结果:共找到3处匹配
<H1>welcome to my Homepage</H1>
<H2>ColdFusion</H2>
<H2>wireless</H2>
<H([1-6])>匹配任何一级标题的开始标签,
([1-6])第一个子表达式
\1匹配第一个子表达式(即子表达式([1-6]) ,\1只匹配前面子表达式对应的相同的数字。例如前面子表达式结果是2,则后面\1也就只能匹配2,即<H2>开头,</H2>结尾。)

3、回溯引用在替换操作中的应用

把文本里的电子邮件地址查找出来,全部替换为可点击的链接

Hello,ben@forta.com is my email address.正则表达式:(\w+[\w\.]*@[\w\.]+\.\w+)替换文本:<A HREF="maito:$1">$1</A>

替换结果:Hello,<A HREF="maito:ben@forta.com">ben@forta.com</A> is my email address.

注意上面是用:$替换\,JavaScript中要这么替换。还有同一个子表达式可以被引用多次,只要在需要用到它的地方写出它的回溯引用就可以了。回溯引用可以跨模式使用,在第一个模式里被匹配的子表达式可以用在第二个模式里。

把用户数据库里某个字段信息重新排版

313-555-1234
248-555-9999
810-555-9000
正则表达式:(\d{3})(-)(\d{3})(-)(\d{4})
替换:($1)$3-$5
替换结果:
(313)555-1234
(248)555-9999
(810)555-9000
(\d{3})(-)(\d{3})(-)(\d{4})有5个子表达式,只用了其中的1/3/5子表达式。

转载于:https://www.cnblogs.com/ccgjava/p/7367778.html

回溯引用:前后一致匹配相关推荐

  1. 正则表达式 之 回溯引用:前后一致匹配

    前言  正则表达式的用途很多,特别是在查找替换,文本处理,爬虫项目中应用更是很多: 复杂的字符串搜寻.替换工作,无法用简单的方式(类似借助标准库函数)达成. 能够帮助你进行各种字符串验证. 不止应用于 ...

  2. python正则表达式,向前向后查找与回溯引用

    向前向后查找 import rekey = r'<html><body><h1>hello world<h1></body></htm ...

  3. 选择、分组、引用,指定匹配的位置

    正则表达式的语法还包括指定选择项,对子表达式分组和引用前一子表达式的特殊字符.字符| 用于分隔供选择的字符.例如: /ab|cd|ef/ 匹配的是字符串 "ab",或者是字符串 & ...

  4. 回溯法实现正则匹配判断

    *:匹配任意个字符 ?:匹配至多1个字符 <?phpclass MNode {public $strIndex;public $patIndex;public $leftMatch = null ...

  5. 二维正则表达式v0.1

    一个二维正则单元,由字符,量词,子表达式,回溯引用(变量),匹配模式等等组成.单元就是递归的子表达式. 字符,由单个字符,一组字符(就是[]),元字符,边界字符组成. 元字符,由任意字符,数字,字母, ...

  6. R数据科学-第七章使用stringr处理字符串

    一.字符串基础 1.字符串长度str_length >library(stringr) > str_length(c("a","R for data scie ...

  7. 用stringr处理字符串

    1. 准备工作 2. 字符串基础 2.1 创建字符串或字符向量 2.2 字符串长度:str_length() 函数 2.3 字符串组合:str_c() 函数 2.4 字符串取子集:str_sub() ...

  8. r gsub substr 字符串处理 r去掉双引号

    用函数 gsub base包中的 gsub() 可以替换/删除字符串中的各种标点符号/字母/数据 删除字符串a中的双引号 gsub('["]', '', string_a) 在gsub函数中 ...

  9. php 正则匹配反向引用,php正则表达式子模式的反向引用学习笔记

    需要用正则表达式获取字符串的标题.标题标签是h1~h6. 使用正则表达式:"@(.*?)@"或者'(.*?)@'.使用了@作为分隔符,注意单双引号的差别\\1与\1. 例1 代码如 ...

最新文章

  1. FALCON组装参数学习
  2. Html转义字符列表
  3. Spring Boot----Dubbo
  4. 【转】Dynamics 365Online 如何启用手机端APP的离线功能
  5. 全网史上最全IT,人工智能,网页开发资料免费送;新时代人人都需要的资料,不看后悔
  6. java string equal 与==的区别
  7. weblogic8.1在myeclipse中启动正常,在单独的weblogic中无法正常启动的解决方案.
  8. 计算机 软考 网络工程 试题,2015年计算机软考网络工程师模拟试题及答案
  9. php开源源码管理后台小程序团购,秒杀,分销 高可用
  10. Pytorch 深度学习实战教程(五):今天,你垃圾分类了吗?
  11. 高级运维工程师打怪升级之路
  12. 解决WPS在Linux下字体缺失
  13. 隐马尔可夫模型的三个基本问题(例子说明)
  14. Apache Drill初探
  15. 直播写代码,今晚8点见!
  16. 硅谷企业SaaS服务教父:如何衡量与优化SaaS企业的核心指标
  17. 输入圆柱的高和半径,求圆柱体积,volume=π×r 2 ×h 。要求定义和调用函数cylinder (r, h )计算圆柱体的体积。
  18. 2020 年 12 月编程语言排行榜
  19. 凌阳SPCA2688 4K摄像头/松翰1080P H.264 摄像头/瑞昱WDR(宽动态)USB摄像头模组
  20. 用 JavaScript 比较两个日期

热门文章

  1. 文心一言 VS 讯飞星火 VS chatgpt (42)-- 算法导论5.4 6题
  2. 《淘宝网开店 进货 运营 管理 客服 实战200招》——1.7 网上开店为什么会失败...
  3. linux系统没有xattr命令,“ reiserfs不能用lsattr等命令 ”的解决(中文)
  4. [PHP] strpos stripos strrpos strripos的区别
  5. ORA-01008: 并非所有变量都已绑定
  6. 《梁宁·产品思维》笔记
  7. html 中 css 中 使背景照片覆盖全屏
  8. python怎么退出游戏,Pygame退出gameOver屏幕
  9. springMVC环境搭建—HTTP状态 500 - 内部服务器错误
  10. 浅浅记录一下挂载阿里云盘到本地