在使用正则表达式的时候,我们经常会使用()把某个部分括起来,称为一个子模式。
子模式有Capturing和Non-Capturing两种情况。
Capturing指获取匹配
,是指系统会在幕后将所有的子模式匹配结果保存起来,供我们查找或者替换。如后向引用的使用;
而Non-Capturing指非获取匹配
,这时系统并不会保存子模式的匹配结果,子模式的匹配更多的只是作为一种限制条件使用,如正向预查,反向预查,负正向预查,负反向预查等。
后向引用
使用"\数字"代表前面某个子模式的匹配内容
我们使用正则表达式,在很多场景下的作用是为了查找和替换,大部分语言的正则表达式实现中,在查找时,使用后向引用来代表一个子模式,语法是"\数字",而在替换中,语法是"$数字"。
在正则表达式中,我们可以使用 "\数字
" 来进行后向引用,数字
表示这里引用的是前面的第几个子模式。如下:
Text
<h1>This is a valid header</h1>
<h2>This is not valid.</h3>
RegEx
<h([1-6])>.*?</h\1
>
Result
<h1>This is a valid header</h1>
<h2>This is not valid.</h3>
上面示例中,\1代表前面的子模式([1-6])的匹配结果 1,所以不符合的匹配<h2>..</h3>并没有被匹配。
后向应用常见的应用常见是:
非获取匹配
在子模式内部前面添加"?:"
非获取匹配表示这个子模式的匹配内容不会被保存,不能用于后向引用中。简单说,非获取匹配就是 只匹配,不保存。看个例子:
Text
Windows 95 and Windows 98 are the successor.
Then Windows 2000 and Windows Xp appeared.
Windows Vista is the Latest version of the family.
RegEx
Windows (?:[\w]+\b)
Result
Windows 95
and Windows 98
are the successor.
Then Windows 2000
and Windows Xp
appeared.
Windows Vista
is the Latest version of the family.
在这个例子中,子模式(?:[\w]+\b)是一个非获取匹配,只匹配内容,单并未保存字匹配的结果。
正向预查
在子模式的内部前面添加"?="
正向预查的意思是,子模式仅仅作为条件限制,并不作为匹配结果输出,子模式前面的。
Text
Windows 95 and Windows 98 are the successor.
Then Windows 2000 and Windows Xp appeared.
Windows Vista is the Latest version of the family.
RegEx
Windows(?= [\d]+\b)
Result
Windows
95 and Windows
98 are the successor.
Then Windows
2000 and Windows Xp appeared.
Windows Vista is the Latest version of the family.
这个例子中,要获取所有后面带有数字的Windows字符串。子模式在这里仅仅作为一个限制条件使用,仅参与匹配过程,并不作为匹配结果输出。
负正向预查的作用正好与正向预查相反,语法为在子模式内部前面增加"?!"。
比如上面例子,如果RegEx为Windows(?! [\d]+\b),则匹配的结果会是Windows Xp和Windows Vista中的windows。
反向预查
在子模式的内部前面添加"?<="
反向预查与正向预查很相似,子模式仅仅作为条件限制,不作为结果输出,唯一的不同是,正向预查匹配子模式前面的结果作为匹配结果,而反向预查匹配子模式后面的结果作为匹配结果。看个例子:
Text
CNY:100.2
USD:222.1
USD:301.3
HKD:122.1
CNY:114.4
RegEx
(?<=CNY:)\d+\.\d
Result
CNY:100.2
USD:222.1
USD:301.3
HKD:122.1
CNY:114.4
这个例子里,要获取属于CNY的金额。子模式仅参与匹配过程,并不作为匹配结果输出。
负反向预查的作用正好与反向预查相反,语法为在子模式内部前面增加"?<!"。
比如上面例子,如果RegEx为(?<!CNY:)\b\d+\.\d,则会获取不属于CNY的金额.
分享到:
相关推荐
kettle 根据系统时间加正则表达式动态匹配获取多个文本文件
java通过正则表达式匹配获取MAC(支持windows和Linux)
正则表达式处理字符串主要有四大功能,匹配、获取、替换和分割: 匹配 的功能是查看一个字符串是否符合正则表达式的语法,一般返回true或者false; 获取 的功能是正则表达式来提取字符串中符合要求的文本; 替换 的...
正则表达式提取图片,通过正则表达式提取段落中的问题,便于排版和美观
使用JS正则表达式,选取video元素的src属性的值,利用jQuery选取元素
自动检查和修改生成的正则表达式的正确性 以可视方式呈现测试结果 从文本文件中获取源文本 从HTML页面中获取源代码 一键导出匹配文本 一键导出提取字符组,并按自定义的分隔符进行分隔 保存项目以便重复测试和...
Jmeter-使用正则表达式提取器获取关联参数的使用方法,网络资源共享!
正则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式。搜索模式可用于文本搜索和文本替换。 语法 /正则表达式主体/修饰...
本资源文件是我自己总结的,其中包括5个类,这5个类的代码基本概括了java正则表达式替换String的多种情况,比如获取某个文件路径中盘符/后边的部分内容,提取"<title>XXXX</title>"中的文字XXXX,用正则表达式获取指定...
options: -s single-line mode -m multi-line mode -i ignoreCase -G global -R from right to left -E extended-regexp pattern ERE...符合匹配-e指定正则式的部分为彩色输出,可输出行号,索引号,支持替换模式并备份
主要介绍了JavaScript正则表达式匹配<div><style>标签 的相关资料,需要的朋友可以参考下
主要介绍了Java使用正则表达式提取XML节点内容的方法,结合具体实例形式分析了java针对xml格式字符串的正则匹配相关操作技巧,需要的朋友可以参考下
取得正则表达式的全部匹配.php 取得正则表达式的全部匹配 返回与模式匹配的数组单元.php 返回与模式匹配的数组单元 正则表达式的替换.php 正则...
可以作为验证正则表达式小工具,也可以作为操作XML的参考。
正则表达式 实例
RegEx Builder可以帮助您比较两个表达式的结果 可以在软件上定义表达式的组数据 可以查看字符的编辑逻辑 如果在测试的时候获得不准确的字符 您可以重复测试多次,直到得到正确的结果 可以在软件上建立正式...
java 利用正则表达式从字符串中提取省、市、区、镇、乡等区域名称(包含少数民族地区),支持地址中无省,无市,无县情况。
即使有经验的用户也经常会遇到性能不佳、误报、漏报等让人挠头的错误,本书对于如何使用正则表达式来解决一些常见的问题给出了按部就班的解决方案,其中包括c#、Java、JavaScript、Perl、PHP、Python、Ruby和VB...
我们已经发现了,在正则表达式中所有的字母字符和数字都是按照字面意思与自身相匹配的.JavaScript的正则表达式还通过以反斜杠(\)开头的转义序列支持某些非 字母字符.例如,序列 "\n" 在字符串中匹配的是一个直接量换...
正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。 写出匹配SQL语句中的所有表名,备忘记录 折磨了好久,正则...