`
learnmore
  • 浏览: 589482 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

正则表达式正向预查,反向预查

 
阅读更多
1.正向预查
现在,我们假设需要仅匹配 Windows,不匹配后面的版本号,并且要求 Windows 后面的版本号只能是 数字类型,换言之,XP 和 Vista 不能被匹配,
在正则表达式中,可以使用 正向预查 来解决这个问题。本例中,写法是:“Windows(?= [\d.]+\b)”。
它的语法是在 子模式内部 前面加“?=”,表示的意思是:首先,要匹配的文本必须满足此子模式前面的表达式(本例,“Windows ”);其次,此子模式不参与匹配。

Text:
Windows 1.03 and Windows 2.0 fisrt Released in 1985 and 1987 respectively.
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 1.03 and Windows 2.0 fisrt Released in 1985 and 1987 respectively.
Windows 95 and Windows 98 are the successor.
Then Windows 2000 and Windows Xp appeared.
Windows Vista is the Latest version of the family.


可以将 正向预查 理解成为自定义的边界(\b),这个边界位于表达式末。
反言之,你可以将位于表达式末的 \b 理解成非获取匹配的一个特例:(?=[ ,.\r\n<>;\-])。注意,这里没有写全边界符号。
Text:
aaaax-aaa

aaaaxaaaa



RegEx:
x(?=[,.\r\n<>;\-])



Result:
aaaax-aaa
aaaaxaaaa
你也可以这样理解上面的匹配过程:
1. 先进行普通匹配:Windows ([\d.]+\b)
2. 然后从匹配文本中将 子模式 内的文本排除掉。



2.反向预查
在上面的例子中,我们知道 正向预查 类似于自定义的 位于文本末 的字符边界。那么自然应该有位于文本首的情况,比如说,我们要匹配下面文本中属于 CNY 的金额:

Text:
CNY: 128.04
USD: 22.5
USD: 23.5
HKD: 1533.5
CNY: 23.78

RegEx:
CNY: \d+\.\d+

Result:
CNY: 128.04

USD: 22.5

USD: 23.5

HKD: 1533.5

CNY: 23.78



与上面类似,我们现在要求仅匹配金额,而不匹配前面的 “CNY:”
正则表达式中,可以使用 反向预查 来解决这个问题。本例中,写法是:(?<=CNY: )\d+\.\d+
反向预查 的语法是在子模式内部前面加“?<=”,表示的意思是:首先,要匹配的文本必须满足此子模式 后面 的表达式(本例,“\d+.\d+”);其次,此子模式不参与匹配。
Text:
CNY: 128.04
USD: 22.5
USD: 23.5
HKD: 1533.5
CNY: 23.78
Page 39 of 42
RegEx:
(?<=CNY: )\d+\.\d+
Result:
CNY: 128.04

USD: 22.5

USD: 23.5

HKD: 1533.5

CNY: 23.78
与前面类似:你可以将 反向预查 理解成为自定义的边界(\b),这个边界位于 表达式首。
反言之,你可以将位于 表达式首 的 \b 理解成一个非获取匹配的一个特例:(?<=[ ,.\r\n<>;\-])。注意,我没有写全所有边界。
Text:
aaa-xaaaa
aaaxaaaaa
RegEx:
(?<=[,.\r\n<>;\-])x
Result:
aaa-xaaaa
aaaxaaaaa
你也可以这样理解上面的匹配过程:
1. 先进行普通匹配:(CNY: )\d+\.\d+
2. 然后从匹配文本中将 子模式 内的文本排除掉。

转载自: https://www.cnblogs.com/boundless-sky/p/7597631.html
分享到:
评论

相关推荐

    精通正则表达式基于.NET ASP PHP JSP JavaScript

    RegexApplication/Default.aspx 正则表达式类的应用 RegexApplication/GetPageHtmlData.aspx 获取网页的内容 第10章(/10/) ASPNETValidator/Compare.aspx 比较验证 ASPNETValidator/...

    java 正则表达式

    下表包含了元字符的完整列表以及它们在正则表达式上下文中的行为:字符 说明 \将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如,“n”匹配字符“n”。“\n”匹配换行符。序列“\\”匹配“\”,“\(”...

    正则表达式30分钟入门教程

    最重要的是——请给我30分钟,如果你没有使用正则表达式的经验,请不要试图在30秒内入门——除非你是超人 :) 别被下面那些复杂的表达式吓倒,只要跟着我一步一步来,你会发现正则表达式其实并没有你想像中的那么困难...

    正则表达式断言、巡视(Assertions)、正向断言、反向断言介绍

    断言(Assertions)在正则表达式概念里面难理解,它通常指的是在目标字符串的当前匹配位置进行的一种测试但这种测试并不占用目标字符串,也即不会移动模式在目标字符串中的当前匹配位置。详细可以看看,正则表达式...

    正则表达式中的反向预搜索实现

    在以前的应用,大多是应用正向预搜索情况。也就是说,在查找内容的右面有特定的内容限定,例如下面的例子: var str3 = ‘CPU: Intel Core2 5200; Memory: 2G;OS: Ubuntu 9.04’; var reg3 = /Memory\:\s+(.*(?=\;...

    C#字符串和正则表达式参考手册

    C#字符串和正则表达式参考手册,包括“@”符号、基本的语法字符、定位字符、重复描述字符、择一匹配、特殊字符的匹配、组与非捕获组、贪婪与非贪婪、回溯与非回溯、正向预搜索、反向预搜索、十六进制字符范围、对[0,...

    理解javascript正则表达式

    了解RegExp类型: ECMAScript通过RegExp类型来支持正则...向前查找:正则表达式向前使用一些字符而不移动这些字符的位置,分为正向前预搜索也叫正向肯定查找( x(?=y) )与负向前预搜索也叫正向否定查找( x(?!y) )。

    PHP 正则表达式 推荐

    Δ 定界符 Δ 字符域 Δ 修饰符 Δ 限定符 Δ 脱字符 Δ 通配符(正向预查,反向预查) Δ 反向引用 Δ 惰性匹配 Δ 注释 Δ 零字符宽 定位 我们什么时候使用正则表达式呢?不是所有的字符操作都用正则就好了,php在...

    PHP正则表达式基础入门

    Δ 通配符(正向预查,反向预查) Δ 反向引用 Δ 惰性匹配 Δ 注释 Δ 零字符宽 定位 我们什么时候使用正则表达式呢?不是所有的字符操作都用正则就好了,php在某些方面用正则反而影响效率。当我们遇到复杂文本...

    正则表达式中的反向预搜索(上)

    在以前的应用,大多是应用正向预搜索情况。也就是说,在查找内容的右面有特定的内容限定,例如下面的例子: 代码如下:var str3 = ‘CPU: Intel Core2 5200; Memory: 2G;...可是JavaScript并不支持反向预搜

    password

    杰西西奥1 ... 构造函数,可用于常规格式的验证。 Internet上的递归调查证明Java参数操作... Escribir tres的类别:PasswordFuerte,PasswordIntermedia,PasswordSimple,todas deben扩展程序,印度的密码和正则表达式。

    Movie-review-classification:使用python中的情感分析库将IMDb电影评论分为正面或负面

    电影评论分类使用python中的情感分析库将IMDb电影评论分为正面或负面情绪分析情感分析是指使用自然语言处理(NLP),文本分析和计算来... 使用正则表达式对请求进行清理后,将MNB分类算法应用于数据集。部署的Web应用

    实战Nginx.取代Apache的高性能Web服务器

    7.3 PCRE正则表达式语法 7.4 Nginx的Rewrite规则编写实例 7.5 Nginx与Apache的Rewrite规则实例对比 第8章 Nginx模块开发 8.1 Nginx模块概述 8.2 Nginx模块编写实践 第9章 Nginx的Web缓存服务与新浪网的开源N...

    实战Nginx:取代Apache的高性能Web服务器 第一章

    7.3 PCRE正则表达式语法 7.4 Nginx的Rewrite规则编写实例 7.5 Nginx与Apache的Rewrite规则实例对比 第8章 Nginx模块开发 8.1 Nginx模块概述 8.2 Nginx模块编写实践 第9章 Nginx的Web缓存服务与新浪网的开源NCACHE...

    实战nginx-张宴

    7.3 PCRE正则表达式语法 7.4 Nginx的Rewrite规则编写实例 7.5 Nginx与Apache的Rewrite规则实例对比 第8章 Nginx模块开发 8.1 Nginx模块概述 8.2 Nginx模块编写实践 第9章 Nginx的Web缓存服务与新浪网的开源NCACHE...

    Ubuntu权威指南(2/2)

    5.15.5 在grep中使用正则 ??表达式 129 5.15.6 检索元字符本身 131 5.15.7 在命令行中使用引号 131 5.16 排序 132 第6章 编辑文件 133 6.1 启动vim编辑器 134 6.1.1 创建文件 134 6.1.2 状态行 135 6.2 vim编辑器的...

    Ubuntu权威指南(1/2)

    5.15.5 在grep中使用正则 ??表达式 129 5.15.6 检索元字符本身 131 5.15.7 在命令行中使用引号 131 5.16 排序 132 第6章 编辑文件 133 6.1 启动vim编辑器 134 6.1.1 创建文件 134 6.1.2 状态行 135 6.2 vim编辑器的...

Global site tag (gtag.js) - Google Analytics