`
learnmore
  • 浏览: 602479 次
  • 性别: 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
分享到:
评论

相关推荐

    正则表达式转换工具

    - 学习高级特性:如分组、后向引用、正向预查等,增强表达能力。 - 实践应用:通过实际项目,不断实践和积累经验。 - 工具支持:利用在线正则表达式测试网站,如Regex101,进行实时调试和学习。 综上所述,"正则...

    正则表达式学习资料以及练习项目代码很多

    正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据验证、搜索和替换等场景。在Python编程语言中,正则表达式提供了强大的文本处理能力,使得开发者能够高效地处理...

    精通正则表达式中文版英文版_中文版为扫描版

    在正则表达式的世界里,基础概念包括字符类(如匹配任何数字[\d])、量词(匹配0次或多次*,1次或多次+,至少n次{n}等)、分组与捕获(使用括号()来定义一个子模式)、预查(用^符号否定预查,如[^abc]匹配非abc的...

    grep、sed、awk、perl等对正则表达式的支持的差别

    Perl的正则表达式功能非常强大,支持大量的高级构造,如正向预查、反向预查、条件表达式等。Perl在处理文本时,不仅可以进行简单的查找替换,还能编写复杂的脚本来完成复杂的文本操作和数据转换。 正则表达式在这些...

    正则表达式综合练习

    正则表达式通过使用预定义的字符集和特殊符号,可以高效地查找、替换或提取符合特定规则的文本。 在实际使用中,正则表达式的作用广泛且强大。以下是一些关键知识点: 1. **基本元素**:正则表达式由基本字符组成...

    最详细正则表达式教程、最好正则表达式参考

    =...)` 用于正向预查,表示后面的部分必须存在但不包含在匹配结果中。例如,`(?)bar` 匹配 'bar' 前面是 'foo' 的情况。 8. **非贪婪匹配**:默认情况下,量词如 `*`、`+` 和 `{n,}` 是贪婪的,会尽可能多地匹配...

    delphi正则表达式解析器

    Delphi正则表达式解析器是一款专为Delphi开发者设计的工具,用于处理和解析正则表达式。这款解析器提供了源代码,使得开发者能够深入理解其内部工作原理,并可以根据需求进行定制或扩展。在Delphi编程环境中,正则...

    [精通正则表达式(第三版)].(美)佛瑞德.扫描版-带详细目录书签.pdf

    书中还探讨了正向预查和反向预查,这些高级特性使得正则表达式能够实现更精细的匹配逻辑。 此外,书中详述了正则表达式的回溯机制,这是理解正则表达式效率和性能的关键。回溯是当匹配失败时,正则引擎退回到上一步...

    正则表达式(Word)

    正则表达式入门指南 正则表达式是编写处理字符串的程序或网页时经常会用到的工具,用于描述某些...=pattern) 代表正向预查,(?) 代表反向预查。 18. 其他知识点 其他知识点包括正则表达式的优化、性能优化、调试等。

    精通正则表达式(中文版) 第1 3 4 5章

    第三章深入讨论了正向预查和反向预查,这是正则表达式中的高级特性。正向预查((?=...))允许我们匹配那些后面紧跟某种模式的字符串,而反向预查((?!...))则匹配不紧接着某种模式的字符串。这些技术可以极大地增强...

    正则表达式帮助文档(正则表达式)

    7. **正向预查**: - `(?=pattern)`表示后面紧跟的模式,但不包含在匹配结果中,如`\b\w+(?=ing\b)`匹配以'ing'结尾的单词。 8. **负向预查**: - `(?!pattern)`表示后面不紧跟的模式,如`\b\w+(?!\d)`匹配不以...

    正则表达式(里面包含大量的正则表达式)

    正则表达式是一种强大的文本处理工具,用于在字符串中进行模式匹配和搜索替换操作。它在编程语言、脚本系统以及各种数据处理场景中广泛应用。正则表达式由字符序列组成,可以用来验证输入是否符合特定规则,或者从...

    精通正则表达式05

    在IT领域,正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,用于匹配、查找、替换或提取字符串中的特定模式。在JavaScript中,正则表达式扮演着至关重要的角色,它允许开发者进行复杂的文本...

    Extjs 提示和正则表达式

    在IT领域,正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,用于匹配、查找、替换或提取字符串模式。在JavaScript框架ExtJS中,正则表达式也经常被用于验证用户输入数据的合法性,例如表单...

    正则表达式中文手册(图书).pdf

    预查可以是正向的,也可以是反向的,它们用于检查某个模式是否在某个位置之后或之前存在。负向预查则是检查某个模式是否不存在于某个位置。 正则表达式的学习和应用对于软件开发、数据处理以及文本分析等领域是至关...

    正则表达式工具

    正则表达式是一种强大的文本处理工具,用于在字符串中进行模式匹配和查找、替换等操作。它由特殊字符(称为“元字符”)和普通字符组成,能够灵活地表示各种复杂的字符串模式。在这个名为“正则表达式工具”的资源中...

    各类正则表达式详细手册

    高级特性包括正向预查(?:...)和反向预查(?!),以及捕获组()。JavaScript还提供了test()、exec()、match()、replace()和split()等方法来操作正则表达式。 3. C#字符串和正则表达式: C#的System.Text.Regular...

    神奇的匹配 正则表达式求精之旅

    7. **预查与否定预查**:用\(?=\)和\(?!\)实现,前者表示后面的内容必须匹配,但不包含在结果中,后者表示后面的内容不能匹配。 8. **反向引用**:在分组后使用\数字,如\1,引用前面分组匹配的内容。 9. **非贪婪...

    正则表达式之道.rar

    "中级(神奇的咒语)"则引入了更高级的概念,如反向引用(用于匹配与前面捕获组相同的文本)、非捕获组(不影响整体的括号分组)以及正向预查(匹配某个位置后面紧跟的特定模式)。这些技巧能帮助解决更为复杂的数据...

    正则表达式测试器

    8. **正向预查和后查**:支持正向预查((?=...))和后查((?!...))来匹配满足或不满足特定条件的文本。 9. **重复量词**:支持量词如*、+、?、{n}、{n,}、{n,m},用于指定字符或子模式的重复次数。 10. **错误...

Global site tag (gtag.js) - Google Analytics