正则表达式之正向预查和反向预查

正向预查:
1. 正向正预查:(?=)
例如:
foo(?=bar)        //匹配后面带有bar的foo
它可以匹配: foobar, abcfoobar  中的foo
但是不能匹配:fooabc 中的foo
 
2. 正向负预查:(?!) 
例如: 
foo(?!bar)        //匹配后面不带bar的foo 
它可以匹配: foo123 
但是不能匹配:foobar

负向预查 
1. 负向正预查(?<=) 
例如: 
(?<=foo)bar        //匹配前面有foo的bar 
它可以匹配: foobar, 123foobar  中的bar 
不可以匹配: 123bar 中的bar
  
2. 负向负预查(?<!) 
例如: 
(?<!foo)bar        //匹配前面没有foo的bar 
它可以匹配: 123bar 中的bar 
不可以匹配: foobar, 123foobar  中的bar

预查还可以嵌套 
例如: 
(?<=(?<!foo)bar)baz        //匹配一个baz,它前面要有bar,但是bar的前面不可以是foo
 
它可以匹配 123barbaz   中的baz 
但是不可以匹配foobarbaz
 
(?<=\d{3}…(?<!999))foo        //匹配一个foo,它前面是三个非999的字符,这三个字符之前是三个数字
 
它可以匹配123123foo, 111cdefoo, 111c2cfoo  里面的foo
 
但是不能匹配 123999foo,abcabcfoo 里面的foo
 
注意:所有的预查都是非获取匹配,不消耗字符。也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

转载:http://3721myth.blog.163.com/blog/static/31831706201132111234121/

时间: 2024-12-27 23:08:29

正则表达式之正向预查和反向预查的相关文章

Delphi 正则表达式语法(9): 临界匹配 - 也叫&quot;预搜索&quot;与&quot;反向预搜索&quot;

Delphi 正则表达式语法(9): 临界匹配 - 也叫"预搜索"与"反向预搜索" //匹配右边 var   reg: TPerlRegEx; begin   reg := TPerlRegEx.Create(nil);   reg.Subject := 'Delphi 6; Delphi 7; Delphi 2007; Delphi Net';   reg.RegEx  := 'Delphi (?=2007)'; // ?=   reg.Replacement :

hdu 4496 并查集 反向并查集 水题 D-City

觉得这道题以后可以和优先队列结合起来 嗯 就是说依次去掉前n条路求连通块数量 处理的时候  只要每次merge发现父亲不相等 然后进到里面合并的时候 num-- wa了好几次是因为最后输出的时候开了点的数量大小的数组而不是操作数量数组 orz D-City Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Submission(s): 5334    Accepted

正则表达式:正向、反向预查

对正则表达式总是望而生畏,现趁有空,补补这块的知识,记录一下正向预查与反向预查: 1.正向预查 现在,我们假设需要仅匹配 Windows,不匹配后面的版本号,并且要求 Windows 后面的版本号只能是 数字类型,换言之,XP 和 Vista 不能被匹配,在正则表达式中,可以使用 正向预查 来解决这个问题.本例中,写法是:"Windows(?= [\d.]+\b)".它的语法是在 子模式内部 前面加"?=",表示的意思是:首先,要匹配的文本必须满足此子模式前面的表达

PHP正则 正向预查&amp;反向预查

了解正向预查&反向预查前,我们先要知道正则的2个函数:preg_match_all . preg_replace preg_match_all 可以看文章:点击查看 preg_replace 可以看文章:点击查看 正向预查&反向预查 正向或反向预查都是非获取匹配,不进行存储供以后使用. 1.正向预查 (?:pattern) 匹配结果 (?=pattern) 正向匹配. (?!pattern) 正向不匹配. 2.反向预查 (?<=pattern) 反向匹配. (?<!patter

hdu4496 D-City(反向并查集)

转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4496 D-City Problem Description Luxer is a really bad guy. He destroys everything he met. One day Luxer went to D-city. D-city has N D-points and M D-lines. Each D

DNS各种基本配置(正向解析区域、反向解析区域;主/从;子域;基本安全控制)

DNS服务器所提供的服务是完成将主机名和转换为IP地址的工作.为什么需要将主机名转换为IP地址的工作呢?这是因为,当网络上的一台客户机访问某一服务器上的资源时,用户在浏览器地址栏中输入的是人类便于识记的主机名和域名.而网络上的计算机之间实现连接却是通过每台计算机在网络中拥有的惟一的IP地址来完成的,这样就需要在用户容易记忆的地址和计算机能够识别的地址之间有一个解析,DNS服务器便充当了地址解析的重要角色. 域名严格意义上的称呼为FQDN(Full Qualified Domain Name).域

正向解析区域、反向解析区域;主/从;子域;基本安全控制

  正向解析区域.反向解析区域:主/从:子域:基本安全控制 一.背景: DNS服务器所提供的服务是完成将主机名和转换为IP地址的工作.为什么需要将主机名转换为IP地址的工作呢?这是因为,当网络上的一台客户机访问某一服务器上的资源时,用户在浏览器地址栏中输入的是人类便于识记的主机名和域名.而网络上的计算机之间实现连接却是通过每台计算机在网络中拥有的惟一的IP地址来完成的,这样就需要在用户容易记忆的地址和计算机能够识别的地址之间有一个解析,DNS服务器便充当了地址解析的重要角色. 正向解析就是通过域

搭建DNS服务器:正向解析区域、反向解析区域、主从DNS

在搭建DNS服务器之前,可以了解一下在什么情况才需要搭建DNS服务器,以及在什么情况下不需要搭建DNS服务器.在此之前,需要了解DNS中域(domain)和区域(zone)的基本概念,以及DNS资源记录的类型,如果对此不熟悉,可以参考我写的上一篇文章<Caching only DNS的设置与forwarding功能>. 一.为什么需要自己搭建DNS服务器? 搭建DNS服务器的原因大致有三点: (1)一般公司都有多台Server需要接入互联网上并提供服务,此时公司需要向ISP申请一个域(doma

0143 JavaScript预解析:概念、变量预解析、函数预解析、函数表达式声明函数问题

4.1 预解析的相关概念 JavaScript 代码是由浏览器中的 JavaScript 解析器来执行的. JavaScript 解析器在运行 JavaScript 代码的时候分为两步:预解析 和 代码执行. 预解析:在当前作用域下, JS 代码执行之前,浏览器会默认把带有 var 和 function 声明的变量在内存中进行提前声明或者定义. [提升到当前作用域的最顶部.] 代码执行: 从上到下执行JS语句. 预解析会把变量和函数的声明在代码执行之前执行完成.[声明提前,赋值留在原地.] 4.