gpt4 book ai didi

regex - 正则表达式匹配A、B、AB

转载 作者:行者123 更新时间:2023-12-04 12:47:07 27 4
gpt4 key购买 nike

我想创建一个匹配 ABAB 的正则表达式,其中 AB 是非常复杂的正则表达式。

一种解决方案是使用 (A|A?B)(AB?|B),但我必须重复其中一个表达式。

A?B? 不起作用,因为它也匹配空字符串。

是否可以在不重复 AB 的情况下创建此正则表达式?

最佳答案

一般来说,这是不可能的。不过,您可以使用一些变通办法。

如果AB以单词字符开始和结束

如果 AB是或以单词类型字符(字母、数字或 _ ,您可以使用

(?<!\w)A?(?:B)?(?!\w)(?<!\W(?!\w))(?<!^(?!\w))

参见 regex demo

  • (?<!\w) - 前面不允许有单词字符
  • A? - 一个可选的 A
  • (?:B)? - 一个可选的 B
  • (?!\w) - 后面不允许有单词字符(此时,我们可以匹配字符串开头和非单词字符之间、非单词和字符串结尾之间或两个非单词字符之间的空字符串,因此我们添加。 ..)
  • (?<!\W(?!\w)) - 如果前面是一个非单词字符,后面没有一个单词字符,则不允许匹配(这会取消两个非单词字符和一个非单词字符与字符串结尾之间的空匹配)
  • (?<!^(?!\w)) - 如果后面没有跟一个单词 char,则不允许在字符串的开头进行匹配。

避免在基于交替的模式中重复部分表达式

在 PCRE 中,您可以避免重复相同的模式部分,因为您可以通过子例程调用递归子模式:

A(?<BGroup>B)?|(?&BGroup)

参见 regex demo .

(?<BGroup>B)是一个命名的捕获组,其模式与 (?&BGroup) 重复命名子程序调用。

参见 Recursive patterns .

关于regex - 正则表达式匹配A、B、AB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43863404/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com