gpt4 book ai didi

正则表达式可选词

转载 作者:行者123 更新时间:2023-12-04 01:51:08 24 4
gpt4 key购买 nike

我试图从一组 ldap objectclass 中找到一个匹配以下每种情况的正则表达式定义 - 它们实际上只是字符串。

语法的变化让我的正则表达式陷入困境,我似乎无法在匹配的贪婪性质和可选单词“MAY”之间找到平衡。

( class1-OID NAME 'class1' SUP top STRUCTURAL MUST description MAY ( brand $ details $ role ) )

期望的输出:描述
实际组 1:描述
实际 GROUP1 与?在五月组:描述五月
( class2-OID NAME 'class2' SUP top STRUCTURAL MUST groupname MAY description )

期望的输出:组名
实际组 1:组名
实际 GROUP1 与?在 MAY 组上: groupname MAY 描述
( class3-OID NAME 'class3' SUP top STRUCTURAL MUST ( code $ name ) )

期望的输出:代码 $ 名称
实际组 1: 不匹配
实际 GROUP1 与?五月组:code $ name
( class4-OID NAME 'class4' SUP top STRUCTURAL MUST ( code $ name ) MAY ( group $ description ) )

期望的输出:代码 $ 名称
实际组 1:代码 $ 名称
实际 GROUP1 与?五月组:code $ name

使用这个:
MUST \(?([\w\$\-\s]+)\)?\s*(?:MAY) ( Regex101 )

匹配第 1、2 和 4 行,但不匹配没有 MAY 的第三行陈述。
添加一个可选的“?”到 MAY group 导致第 3 行和第 4 行匹配良好,但随后第 1 行和第 2 行贪婪地运行并运行到 MAY (第 1 行)或字符串的其余部分(第 2 行)。

感觉我需要正则表达式来考虑 MAY作为可选,但如果 MAY发现它应该停止 - 我似乎无法找到平衡。

最佳答案

如果您可以使用带有两个捕获组的正则表达式,您可以使用

MUST\s+(?:\(([^()]+)\)|(\S+))\s*(?:MAY)?

regex demo

详情
  • MUST - 一句话MUST
  • \s+ - 1+ 个空格
  • (?:\(([^()]+)\)|(\S+)) - 两种选择:
  • \( - (
  • ([^()]+) - 第 1 组:除 ( 之外的 1+ 个字符和 )
  • \) - 一个 )字符
  • | - 或
  • (\S+) - 第 2 组:一个或多个非空白字符
  • \s+ - 1+ 个空格
  • (?:MAY)? - 可选字 MAY
  • 关于正则表达式可选词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53078759/

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