gpt4 book ai didi

regex - 在Golang中以任何顺序匹配正则表达式

转载 作者:行者123 更新时间:2023-12-01 22:17:47 24 4
gpt4 key购买 nike

我有这样的事情:

option name [p1|p2|p3] | [p4]

其中 选项名称是必填项。 选项必须完全匹配,而 名称对任何ASCII字符组合都是有效的。如果匹配,则这两个之后的任何字符串都是可选的,并且可以按任何顺序出现。因此,它应该匹配:
option name1 p1
option name1 p1 p4
option name1 p4 p1

我的正则表达式尝试:
^(option)\s+(([a-zA-Z0-9]+))\s?(((p1|p2|p3)?)\s?((p4))?)\s?$

如果以特定顺序提供可选字符串,则此方法有效,例如:
option name1 p1 p4
option name1
option name1 p1
option name1 p4

但这不起作用:
option name1 p4 p1

有没有办法编写正则表达式来支持这些可选字符串的任何顺序?

编辑:
p1,p2,p3,p4仅是示例。它可以是任何提供的确切字符串,例如foo,bar,baz。

更多说明:

名称可以是任何字符串。在理想情况下,它应该不同于foo,bar,baz和其他选项。

最佳答案

如果要同时匹配两个变体,则可以使用或|列出两个变体。

要使第二部分可选,可以使用可选的非捕获组(?:...)?
没有所有捕获组的示例:

^option\s+[a-zA-Z0-9]+(?:\s?(?:(?:foo|bar|baz)(?:\s?test)?|test(?:\s?(?:foo|bar|baz))?))?$

在某些方面看起来像
  • ^字符串开头
  • option\s+[a-zA-Z0-9]+匹配选项,1+个空格字符和a +字符a-zA-Z或数字0-9
  • (?:非捕获组
  • \s?匹配可选的空白字符char
  • (?:非捕获组
  • (?:foo|bar|baz)(?:\s?test)?匹配例如bar等和可选测试
  • |
  • test(?:\s?(?:foo|bar|baz))?匹配测试以及可选的foo,bar等
  • )关闭非捕获组
  • )?关闭非捕获组并将整个部分设为可选
  • $字符串结尾

  • Regex demo

    关于regex - 在Golang中以任何顺序匹配正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58237638/

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