RegExp正则表达式左限定右限定左右限定,预查询,预查寻,断言 : (?<= , (?= , (?<! , (?!

这篇具有很好参考价值的文章主要介绍了RegExp正则表达式左限定右限定左右限定,预查询,预查寻,断言 : (?<= , (?= , (?<! , (?!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

RegExp正则表达式左限定右限定左右限定,预查询,预查寻,断言 : (?<= , (?= , (?<! , (?! 有好多种称呼

(?<= , (?= , (?<! , (?! 有好多种称呼 ,

RegExp正则表达式左限定右限定左右限定,预查询,预查寻,断言 : (?<= , (?= , (?<! , (?!,RegExpTextString文本字符串处理,正则表达式


我称为: 左限定, 右限定, 左否定, 右否定

  • (?<=左限定)    (?=右限定)
  • (?<!左否定)    (?!右限定)

RegExp正则表达式左限定右限定左右限定,预查询,预查寻,断言 : (?<= , (?= , (?<! , (?!,RegExpTextString文本字符串处理,正则表达式

再提炼

  • ?<=    ?=
  • ?<!    ?!

RegExp正则表达式左限定右限定左右限定,预查询,预查寻,断言 : (?<= , (?= , (?<! , (?!,RegExpTextString文本字符串处理,正则表达式


其它的称呼

正则表达式预查寻分为 4 种:

  1. 正向肯定预查: (?=pattern) (?=pattern)
  2. 正向否定预查: (?!pattern) (?!pattern)
  3. 反向肯定预查: (?<=pattern) (?<=pattern)
  4. 反向否定预查: (?<!pattern) (?<!pattern)

比如:

  • 匹配 babcab 中的第二个b, 可以用 (?<=a)b(?=c), 含义是:左a右c的b
  • (?<!a)b(?!c)的含义是: 左非a右非c的b, 它会匹配到第一个b

或者称为:

  1. 正向零宽度先行断言: (?=exp) (?=exp)
  2. 正向零宽度回顾后断言: (?!exp) (?!exp)
  3. 负向零宽度先行断言: (?<=exp) (?<=exp)
  4. 负向零宽度回顾后断言: (?<!exp) (?<!exp)

或者称为:

  • 肯定性:匹配 regex
  • 否定性:不匹配 regex
  • 前瞻:向前(右、正向)看(预查)
  • 后顾:向后(左、反向)看(预查)
  • 肯定性前瞻:先看看前方(右边)是否匹配 regex,但不向前走
  • 否定性前瞻:先看看前方(右边)是否不匹配 regex,但不向前走
  • 肯定性后顾:回头看后方(左边)是否匹配 regex
  • 否定性后顾:回头看后方(左边)是否不匹配 regex

或者称为:

菜鸟教程-正则表达式的先行断言(lookahead)和后行断言(lookbehind)

  • (?=pattern) 零宽正向先行断言(zero-width positive lookahead assertion)
  • (?!pattern) 零宽负向先行断言(zero-width negative lookahead assertion)
  • (?<=pattern) 零宽正向后行断言(zero-width positive lookbehind assertion)
  • (?<!pattern) 零宽负向后行断言(zero-width negative lookbehind assertion)

菜鸟教程-正则表达式 - 元字符
`

字符 描述
(?=pattern)

正向肯定预查(look ahead positive assert),在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。

例如,"Windows(?=95|98|NT|2000)"能匹配"Windows2000"中的"Windows",但不能匹配"Windows3.1"中的"Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

(?!pattern)

正向否定预查(negative assert),在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。

例如"Windows(?!95|98|NT|2000)"能匹配"Windows3.1"中的"Windows",但不能匹配"Windows2000"中的"Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

(?<=pattern) 反向(look behind)肯定预查,与正向肯定预查类似,只是方向相反。

例如,"(?<=95|98|NT|2000)Windows"能匹配"2000Windows"中的"Windows",但不能匹配"3.1Windows"中的"Windows"。
(?<!pattern) 反向否定预查,与正向否定预查类似,只是方向相反。

例如"(?<!95|98|NT|2000)Windows"能匹配"3.1Windows"中的"Windows",但不能匹配"2000Windows"中的"Windows"。



文章来源地址https://www.toymoban.com/news/detail-828789.html

来自 文心一言 4.0

在正则表达式中,如果你想限定一个模式(pattern)的左右相邻内容,你可以使用断言(assertions)。常见的断言有:

  1. 正向前瞻断言(Positive Lookahead) - (?=pattern)

    • 表示之后的字符序列需要匹配给定的模式,但该模式本身不会成为匹配结果的一部分。
  2. 负向前瞻断言(Negative Lookahead) - (?!pattern)

    • 表示之后的字符序列不能匹配给定的模式。
  3. 正向后顾断言(Positive Lookbehind) - (?<=pattern)

    • 表示之前的字符序列需要匹配给定的模式,但该模式本身不会成为匹配结果的一部分。
  4. 负向后顾断言(Negative Lookbehind) - (?<!pattern)

    • 表示之前的字符序列不能匹配给定的模式。

请注意,不是所有的正则表达式引擎都支持后顾断言,尤其是负向后顾断言。

下面是一些例子:

  • 匹配被"abc"和"def"包围的字符串:

    (?<=abc).*?(?=def)
    

    在这个例子中,.*? 是一个懒惰量词,它会匹配尽可能少的字符直到遇到 def

  • 匹配不被数字包围的单词:

    \b(?<![0-9])[a-zA-Z]+\b(?![0-9])
    

    这里使用了单词边界 \b,负向后顾断言 (?<![0-9]) 和负向前瞻断言 (?![0-9]) 来确保单词的前后都不是数字。

  • 匹配被引号包围的文本(不包含引号本身):

    (?<=")[^"]*(?=")
    

    这个表达式使用了正向后顾断言 (?<=") 和正向前瞻断言 (?=") 来匹配引号之间的文本。[^"]* 匹配除引号外的任意字符(0个或多个)。

请记住,正则表达式中特殊字符和元字符通常需要转义(例如,在字符串中使用 \\ 代替 \,使用 \" 代替 ")。这取决于你使用的编程语言和上下文。

最后,由于正则表达式的复杂性和多样性,建议在实际应用中仔细测试你的表达式以确保它按照预期工作。



来自 文心一言 3.5

正则表达式预查寻(也称为预查或断言)是一种特殊的匹配技术,用于在匹配位置之前或之后执行条件判断,而不会真正消耗字符串中的字符。预查寻可以用来限定左右相邻的内容,确保它们符合特定的模式。

预查寻包括正向预查和反向预查,每种预查又可以分为肯定预查和否定预查。

  1. 正向预查:

    • 正向肯定预查:语法为 (?=pattern)。它会匹配任何位置,该位置后面紧跟着符合指定模式的字符串。但是,该模式本身不会被包括在匹配结果中。例如,表达式 Windows(?=95|98|NT) 会匹配任何以“Windows”开始,后面紧跟着“95”、“98”或“NT”的字符串。但匹配结果只包括“Windows”,不包括后面的操作系统版本。
    • 正向否定预查:语法为 (?!pattern)。它会匹配任何位置,该位置后面不能紧跟着符合指定模式的字符串。例如,表达式 \d+(?!\.) 会匹配任何不以小数点结尾的数字序列。
  2. 反向预查:

    • 反向肯定预查:语法为 (?<=pattern)。它会匹配任何位置,该位置前面紧挨着符合指定模式的字符串。但是,该模式本身不会被包括在匹配结果中。例如,表达式 (?<=19|20)\d{2} 会匹配任何以“19”或“20”开始的两位数字,但匹配结果不包括前面的“19”或“20”。
    • 反向否定预查:语法为 (?<!pattern)。它会匹配任何位置,该位置前面不能紧挨着符合指定模式的字符串。请注意,这种形式的反向否定预查在大多数正则表达式引擎中不受支持。

预查寻在正则表达式中非常有用,特别是在处理复杂的模式匹配和验证时。通过使用预查寻,你可以更精确地控制匹配的位置,确保左右相邻的内容符合特定的要求。



问 C知道 “如何用正则表达式限定左右相邻内容”

使用正则表达式可以通过限定左右相邻内容来配特定的模式。以下是一种常用的方法:

import re

# 使用正则表达式限定左右相邻内容
pattern = r'(?<=左边的内容)要匹配的内容(?=右边的内容)'

# 在文本中搜索匹配的内容
text = "左边的内容要匹配的内容右边的内容"
matches = re.findall(pattern, text)

# 输出匹配的结果
for match in matches:
    print(match)

在上述代码中,我们使用了正则表达式的两个特殊符号来限定左右相邻内容:

  • (?<=左边的内容):表示要匹配的内容的左边必须是指定的左边内容。
  • (?=右边的内容):表示要匹配的内容的右边必须是指定的右边内容。

你可以根据实际情况修改左边的内容要匹配的内容右边的内容来适应你的需求。



问 C知道 “正则表达式预查寻”

正则表达式预查是一种特殊的正则表达式语法,用于在匹配过程中进行前瞻或后顾判断,而不会消耗字符。预查可以帮助我们在匹配时确定某些条件是否满足,从而更精确地匹配目标字符串。

正则表达式预查分为正向预查和反向预查两种类型。正向预查用于匹配在某个位置之后的内容,而反向预查则用于匹配在某个位置之前的内容。

下面是两个示例来演示正则表达式预查的使用:

  1. 正向预查示例:匹配后面跟着数字的单词
import re

text = "apple123 orange456 banana789"
pattern = r"\w+(?=\d)"  # 匹配后面跟着数字的单词
result = re.findall(pattern, text)
print(result)  # 输出:['apple', 'orange', 'banana']
  1. 反向预查示例:匹配前面跟着数字的单词
import re

text = "123apple 456orange 789banana"
pattern = r"(?<=\d)\w+"  # 匹配前面跟着数字的单词
result = re.findall(pattern, text)
print(result)  # 输出:['apple', 'orange', 'banana']



问 C知道 “正则表达式断言”

正则表达式断言是一种用于匹配字符串中特定位置的模式。它们不会消耗输入字符串,只是检查当前位置是否满足某些条件。正则表达式断言分为前行断言和后行断言。

  1. 前行断言(Positive Lookahead Assertion):用于匹配当前位置后面的内容是否满足某个条件。它使用语法(?=pattern),其中pattern是一个正则表达式。例如,要匹配字符串中包含"re"的单词,但不包括"regex"和"regular",可以使用前行断言re(?=gex|gular)

  2. 后行断言(Positive Lookbehind Assertion):用于匹配当前位置前面的内容是否满足某个条件。它使用语法(?<=pattern),其中pattern是一个定长的正则表达式。后行断言在Perl和Python中有一些限制,它们只能使用定长的表达式,不能使用*+?等元字符。例如,要匹配除"regex"和"regular"之外的"re",可以使用后行断言(?<!g)re

需要注意的是,不同的编程语言对正则表达式断言的支持程度有所不同。Perl和Python对后行断言有一些限制,Java不支持*+字符,而JavaScript则不支持后行断言。

可能不正确, 经验证, JavaScript是支持(?<=a)b(?=c)这样的的
其它待验证







到了这里,关于RegExp正则表达式左限定右限定左右限定,预查询,预查寻,断言 : (?<= , (?= , (?<! , (?!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL数据库——MySQL REGEXP:正则表达式

    正则表达式主要用来查询和替换符合某个模式(规则)的文本内容。例如,从一个文件中提取电话号码,查找一篇文章中重复的单词、替换文章中的敏感语汇等,这些地方都可以使用正则表达式。正则表达式强大且灵活,常用于非常复杂的查询。 MySQL 中,使用  REGEXP  

    2024年02月01日
    浏览(51)
  • Oracle使用regexp_like报错ORA-12733 正则表达式太长

    注:此篇内容并没有解决正则表达式太长的问题。 在命令行窗口连接数据库: 其中: username  是你的数据库用户名。 password  是你的数据库密码。 hostname  是数据库服务器的主机名或IP地址。 port  是监听端口,默认是1521。 SID  是系统标识符,是数据库实例的唯一名称。

    2024年04月15日
    浏览(46)
  • Oracle 正则表达式详解(regexp_substr、regexp_instr、regexp_replace、regexp_like)

    文章目录 1 概述 2 匹配规则 3 正则函数 3.1 regexp_substr() 3.2 regexp_instr() 3.3 regexp_replace() 3.4 regexp_like() 1 概述 1. 作用:处理字符时,很强大 1 2. 分类:与下列相似,但功能更加强大(‘支持正则表达式’) (1) regexp_like : 同 like 功能相似(模糊 ‘匹配’) (2) regexp_instr : 同 instr 功

    2024年02月09日
    浏览(55)
  • VBA提高篇_ 31 VBA调用正则表达式_RegExp.Pattern/Global/Execute(s)/Replace(s,r)

    RegExp对象: 属于外部对象,对应的变量需要声明为Object对象,并使用CreateObject函数创建 用于创建各种外部对象,只要将该对象的完整类名作为参数(字符串形式),即可返回一个该类的对象 例: CreateObject(“word.application”),返回一个微软的word对象,用于打开和修改Word对象 结果存入在M

    2024年02月09日
    浏览(50)
  • 【正则表达式】正则表达式常见匹配模式

    模式 描述 w 匹配字母数字及下划线 W 匹配非字母数字下划线 s 匹配任意空白字符,等价于 [tnrf]. S 匹配任意非空字符 d 匹配任意数字,等价于 [0-9] D 匹配任意非数字 A 匹配字符串开始 Z 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串 z 匹配字符串结

    2024年02月09日
    浏览(81)
  • 【SQL-正则】利用正则表达式进行过滤操作(常用正则表达式)

    1、由数字、26个英文字母或者下划线组成的字符串 2、非负整数(正整数 + 0 ) 3、正整数 4、非正整数(负整数 + 0) 5、负整数 6、整数 7、非负浮点数(正浮点数 + 0) 8、正浮点数 9、非正浮点数(负浮点数 + 0) 10、负浮点数 11、浮点数 12、由26个英文字母组成的字符串 13、

    2024年02月12日
    浏览(81)
  • Python正则表达式之学习正则表达式三步曲

            正则表达式描述了一种字符串匹配的模式,可以用来检查一个串的有无某子串,或者做子串匹配替换,取出子串等操作。也可以说正则表达式就是字符串的匹配规则,也可以理解为是一种模糊匹配,匹配满足正则条件的字符串。         1、数据验证(eg:表单验

    2024年02月15日
    浏览(66)
  • Java 之正则表达式语法及常用正则表达式汇总

    正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为 regex、regexp 或 RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。 正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称

    2024年02月09日
    浏览(71)
  • 老夫的正则表达式大成了,桀桀桀桀!!!【Python 正则表达式笔记】

    特殊字符 .^$?+*{}[]()| 为特殊字符,若想要使用字面值,必须使用 进行转义 字符类 [] [] 匹配包含在方括号中的任何字符。它也可以指定范围,例: [a-zA-Z0-9] 表示a到z,A到Z,0到9之间的任何一个字符 [u4e00-u9fa5] 匹配 Unicode 中文 [^x00-xff] 匹配双字节字符(包括中文) 在 [] 中

    2024年02月04日
    浏览(60)
  • 机器学习与数据科学-专题1 Python正则表达式-【正则表达式入门-1】

    为了完成本关任务,你需要掌握: 在 Python 中使用正则表达式; 最基础正则表达式; 正则匹配函数。 在 Python 中使用正则表达式 正可谓人生苦短,我用 Python。Python 有个特点就是库非常多,自然拥有正则匹配这种常见的库,并且此库已经嵌入在 Python 标准库中,使用起来非常

    2024年01月22日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包