[正则表达式]PCRE反向分组引用】的更多相关文章

在常见的文本匹配场景上,经常会需要用到一些像HTML这样的嵌套标签类型的文本匹配,经过多翻折腾,拼凑出了这样的一条语句 (<([\w]+)>((?1)|[\w\s])*</\2>) 如何理解? 要解析上面的语句是如何运行的,先来了解一下PCRE的反向分组引用机制 (?n) 以括号为单元,紧贴左括号以?号开始,接着引用分组的序号数字,这是反向引用分组的语法 例如,\[([\w]+)-(?1)\]将会匹配像[9-3],[9-9]这样的结构,因为(?1)引用了第一个括号的表达式也就是([…
正则表达式中,凡出现圆括号(),括号中的匹配内容就会被认为是一个分组: 根据括号从左边出现的顺序命名分组代号,分组代号由1到n(代号0通常被一些语言用来引用整个表达式匹配的结果,即使这个表达式没有分组括号,但是表达式内不能引用\0),例如: (a(b)) 以上表达式包含两个分组第1个是(a(b)),第2个是(b),很明显第一个分组包含了第二个分组的内容: 反向引入分组,其实是后面引用分组中匹配的结果,引用分组的语法是\+分组代号: (.)\1 这个表达式的含义是匹配一个任意字符,接下来再出现一个…
Django基础二之URL路由系统 本节目录 一 URL配置 二 正则表达式详解 三 分组命名匹配 四 命名URL(别名)和URL反向解析 五 命名空间模式 一 URL配置 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表.你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码. 基本格式  from django.conf.urls im…
PHP 正则表达式(PCRE) 正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串.将匹配的子串做替换或者从某个串中取出符合某个条件的子串等. 更多正则表达式的内容可参考我们的:正则表达式 - 教程. PHP 中我们可以使用 PCRE 扩展来匹配字符串的模式. PCRE 函数 函数 描述 preg_filter 执行一个正则表达式搜索和替换 preg_grep 返回匹配模式的数组条目 preg_last_error 返回最后一个PCR…
如果想把区号从匹配的电话号码中分离,可以添加括号在正则表达式中创建分组,再使用group()方法,从一个分组中获取匹配的文本 正则表达式字符串中,第一个括号是第一组,第二个括号是第二组.向group()方法传入参数1或2,可以获得匹配文本中的不同部分,传入0或者不传参数,将返回整个匹配的文本 >>> import re>>> m=re.search(r'(\d{3})-(\d{3}-\d{4})','My phone number is 012-239-4597')&g…
维基百科:http://wiki.ubuntu.org.cn/Python%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97 组是通过 "(" 和 ")" 元字符来标识的. "(" 和 ")" 有很多在数学表达式中相同的意思:它们一起把在它们里面的表达式组成一组.举个例子,你可以用重复限制符,象 *, +, ?, 和…
设想一下这个问题,假设为了方便长串数字的阅读性,需要为其添加逗号作为分隔,需要怎么做呢? 2569836495 => 2,569,836,495 正则表达式的匹配通常是从左往右的,这导致无法使用类似[\d]{3}这样的方法去解决问题,因为数字是从右边结算的 用s/([\d]{3})/$1,/g处理上面的数字,只会得到这样的结果 2569836495 => 256,983,649,5 显然这是错误的标记方法 幸好PCRE提供了[顺序环视],和[逆序环视]功能 [顺序环视]:(?=REG),例如(…
1.使用括号可以提取字符串 不加括号匹配电话号码 匹配成功后,如何提取想要的字符串? 使用(...)可以分组:"^(\d{3,4})\-(\d{6,8})$" 2.String.matcher vs Pattern.matcher 前面用到的正则表达式是使用String.matches(),而我们在分组时用到的是java.util.regex.Matcher和java.util.regex.Pattern.而String.matches()内部就是调用的Matcher和Pattern类…
今天群里有个人问,怎样用增则表达式匹配三角形的三边,其实只是要匹配三个数字而已,如 301 402 503 开始认为很简单,我就写了一个   "(([1-9]\\d?)\\s){2}$2" 结果他说错了,我感觉很奇怪,于是自己打开电脑试了试,果然是错的,然后看了看以前的笔记,发现我的Back 引用捕获组错了,因为$符号是在不同字符串中对捕获组的引用看下面这个方法 public static void text_1() { String str="我..我要...要要要..学.…
无捕获分组 当你要将一部分规则作为一个整体对它进行某些操作,比如指定其重复次数时,你需要将这部分规则用 (?:) 把它包围起来. 分支条件 在正则表达式中,分支条件是一个很常用的条件. 满足条件A 或者 满足条件B  ,这个时候我们就可以使用分支条件了. 分支条件使用的符号为 | 代码示例: 我们突然发现,它把字符串分割成两个部分了 I have a dog  和  cat    而不是    I have a dog  和   I have a cat 如果我们只要区分dog和cat呢?正则要…
var pattern=/google{4,8}$/; // {4,8}$表示匹配结尾4-8次 var str='googleeeeeeeee'; // 表示e的4-8次 alert(pattern.test(str)); var pattern=/(google){4,8}$/; // 分组,可以看成一个字符 var str='googlegooglegooglegoogle'; // 表示google 4-8次 alert(pattern.test(str)); var pattern=/6…
基本语法 (exp)匹配exp, 并捕获文本到自动命名的组里 (?<name>exp)  自己命名分组 static void Main(string[] args)        {            string pattern = "http[s]?://[\\w]+";            pattern = "(?<=<a\\s+href=(?<link>.*?)(?=\\s+target=).*?>)(?<co…
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4292994.html 创建正则对象 正则表达式 ABAP中可以使用regex的地方 除了下面两个语句可以使用regex外: FIND REPLACE 下面主函数的参数也可以使用regex: co…
无名.有名分组 (1)正则表达式—无名分组 从正则表 达式的左边开始看,看到的第一个左括号“(”表示表示第一个分组,第二个表示第二个分组, 依次类推. 需要注意的是,有一个隐含的全局分组(就是索引号为0的分组),就是整个正则 表达式匹配的结果 (2)正则表达式—有名分组 命名分组就是给具体有默认分组编号的组另外再起一个别名,方便以后的引用. 命令分组的语法格式如下: (?P<name>正则表达式) 语法格式中的字符P必须是大写的“P”,name是一个合法的标识符,表示分组的别名. s = &q…
无名.有名分组 (1)正则表达式—无名分组 从正则表 达式的左边开始看,看到的第一个左括号“(”表示表示第一个分组,第二个表示第二个分组, 依次类推. 需要注意的是,有一个隐含的全局分组(就是索引号为0的分组),就是整个正则 表达式匹配的结果 (2)正则表达式—有名分组 命名分组就是给具体有默认分组编号的组另外再起一个别名,方便以后的引用. 命令分组的语法格式如下: (?P<name>正则表达式) 语法格式中的字符P必须是大写的“P”,name是一个合法的标识符,表示分组的别名. s = &q…
本文主要讲解javascript 的正则表达式中的分组匹配与前瞻匹配的,需要对正则的有基本认识,本人一直对两种匹配模棱不清.所以在这里总结一下,如有不对,还望大神指点. 1.分组匹配: 1.1捕获性分组匹配 () 2.2非捕获性分组匹配 (?:)2前瞻匹配: 2.1正向前瞻匹配: (?=表达式) 后面一定要匹配有什么 2.2反向前瞻匹配: (?!表达式) 后面一定不能要有什么 1.1.捕获性分组匹配 () var str1 = "holle word 123456 can 12s a 123 a…
正则表达式分组 分组就是用一对圆括号"()"括起来的正则表达式,匹配出的内容就表示一个分组.从正则表达式的左边开始看,看到的第一个左括号"("表示第一个分组,第二个表示第二个分组,依次类推,需要注意的是,有一个隐含的全局分组(就是0),就是整个正则表达式. 分完组以后,要想获得某个分组的内容,直接使用group(num)和groups()函数去直接提取就行. 例如:提取代码中的超链接中的文本 >>> s='<div><a href…
re模块和正则表达式别名和分组机制 命名分组 (1)分组--可以让我们从文本内容中提取指定模式的部分内容,用()来表示要提取的分组,需要注意的是分组 是在整个文本符合指定的正则表达式前提下进行的进一步筛选. (2)通过group()和groups()来获取分组的内容 group(num)返回的是第num组括号所匹配的值,group()即group(0),它表示匹配正则式的整个文本: groups()以tuple形式(元组)返回所有括号匹配的值. 如下例: m = re.match('^(\d{3…
JS正则表达式---分组 之前写了一篇关于正则新手入门的文章,本以为对正则表达式相对比较了解 但是今天我又遇到了一个坑,可能是自己不够细心的原因吧,今天就着重和大家分享一下javascript正则表达式中的分组.如果你对JS正则表达式不够理解 可以点击这里了解更多. 分组在正则中用的还是比较广的,我所理解的分组 就是一对括号() ,每一对括号 就代表了一个分组,分组可以分为: 捕获性分组 非捕获性分组 捕获性分组 捕获性分组会在 比如 match exec这样的函数中以第二项,第三项的形式得到相…
前言 想必学习perl的人,对基础正则表达式都已经熟悉,所以学习perl正则会很轻松.这里我不打算解释基础正则的内容,而是直接介绍基础正则中不具备的但perl支持的功能.关于基础正则表达式的内容,可参阅基础正则表达式. 另外,本系列只介绍匹配操作,关于内容替换,因为和学习使用perl正则并无多大关系,所以替换相关的将在下一篇文章单独解释. 这里推荐一个学正则非常好的资料:stackflow上关于各种语言(perl/python/.net/java/ruby等等)的正则的解释.示例,这里收集的都是…
/* 测试环境:PHP5.3.29(PCRE8.32) */ 常用函数:(正则表达式规则基本同JS_RE_Read.txt) PS:1.PHP中的PCRE一般仅使用这三个修饰符:"i" "m" "s".2.PHP的正则表达式中反向引用使用注意点: "/(abc)\\1/"和'/(abc)\1/'等价,前者之所以\\1是因为包含在双引号里(因为PHP的双引号和单引号不同). 1:int preg_match(string $pa…
我发布的「正则表达式入门以及高阶教程」,欢迎学习. 课程简介 正则表达式是软件开发必须掌握的一门语言,掌握后才能很好地理解到它的威力: 课程采用概念和实验操作 4/6 分隔,帮助大家理解概念后再使用大量的实例加深对概念的理解: 实例操作是对概念最好的理解,也是学习新语言最有效的办法: 在课程中也穿插着大量软件开发的技巧和大家分享: 应该是把晦涩的正则表达式讲解的最生动的课程: 掌握了正则表达式后,您一定会觉得这是一门最值得掌握的语言. 课程大纲 第一课:正则表达式入门简介.使用场景.学习工具介绍…
match 和 exec 主要有两点不同: 1.exec是正则表达式的方法,而不是字符串的方法,它的参数才是字符串,如下所示: var re=new RegExp(/\d/); re.exec( "abc4def" ); 或者使用perl风格: /\d/.exec( "abc4def" ); match才是字符串类提供的方法,它的参数是正则表达式对象,如下用法是正确的: "abc4def".match(\d); 或者 "abc4def&…
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title> javascript 正则表达式 </title> <meta name="Generator" content="Edit…
String 类包括许多字符串搜索和替换方法,当你要在较大字符串中定位文本字符串时,可以使用这些方法. 当你希望在较大字符串中定位若干子字符串之一时,或者当你希望在字符串中标识模式时,正则表达式最有用,,以下主要介绍下C#正则表达式的用法: 字符转义 正则表达式中的反斜杠字符 (\) 指示其后跟的字符是特殊字符(如下表所示),或应按原义解释该字符. 转义字符 描述 模式 匹配 \a 与报警 (bell) 符 \u0007 匹配. \a “Error!”+“\u0007”中的“\u0007” \b…
目前为止,许多编程语言和工具都包含对正则表达式的支持,C#也不例外,C#基础类库中包含有一个命名空间(System.Text.RegularExpressions)和一系列可以充分发挥规则表达式威力的类(Regex.Match.Group等).那么,什么是正则表达式,怎么定义正则表达式呢? 一.正则表达式基础 l 什么是正则表达式 在编写字符串的处理程序时,经常会有查找符合某些复杂规则的字符串的需要.正则表达式就是用于描述这些规则的工具.换句话说,正则表达式就是记录文本规则的代码. 通常,我们在…
  javascript正则表达式 javascript正则表达式 regular expression是一个描述字符模式的对象: ECMAScript中的RegExp类表示正则表达式: String和RegExp都定义了使用正则表达式进行强大的模式匹配.文本检索和替换的函数: 正则表达式主要用来验证客户端的输入数据:   Ⅰ.创建正则表达式 类似于创建字符串,可以使用new运算符也可以采用字面值: 参数 含义 g 全局匹配 i 忽略大小写 m 多行匹配 下文中的javascript代码是通过…
本文由Charles翻自raywenderlich原文:NSRegularExpression Tutorial: Getting Started更新提示:本教程被James Frost更新到了iOS8和swift.Tutorial团队成员的Soheil Azarpour完成最初发布. 正则表达式(广为所知的“regex”)是一个字符串或一个字符序列来说明一种模式,把它作为一个搜索字符串-非常强大! 在一个文本编辑器或文字处理器中普通的旧式搜索只允许你进行简单的匹配.正则表达式可以实现这样简单的…
正则表达式在jquery.linux等随处可见,已经无孔不入.因此有必要对这个工具认真的学习一番.本着认真.严谨的态度,这次总结我花了近一个月的时间.但本文无任何创新之处,属一般性学习总结. 一.思考 1. 案例 通常系统管理员添加一个普通用户时,都有一些默认密码(如:123456),当新用户登录系统后需要自行修改密码为系统所要求的安全范围内的密码格式.如:密码位数要大于6位,必须是字母.特殊符号(如:下划线).数字的组合形式.可以这样做: Ø纯JavaScript实现 Js代码   funct…
非捕获组命名组 精心设计的正则表达式可能会划分很多组,这些组不仅可以匹配相关的子串,还能够对正则表达式本身进行分组和结构化.在复杂的正则表达式中,由于有太多的组,因此通过组的序号来跟踪和使用会变得困难.有两个新的功能可以帮你解决这个问题——非捕获组和命名组——它们都使用了一个公共的正则表达式扩展语法.我们先来看看这个表达式扩展语法是什么. 正则表达式的扩展语法 众所周知,Perl 5 为标准的正则表达式增加了许多强大的功能.Perl 的开发者们并不能选择一个新的元字符或者通过反斜杠构造一个新的特…