【发布时间】:2020-02-02 20:46:02
【问题描述】:
我有这样的事情:
option name [p1|p2|p3] | [p4]
其中 option 和 name 是必填项。 option 必须完全匹配,而 name 对任何 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。
更多说明:
name 可以是任何字符串。在完美的场景中,它应该不同于 foo、bar、baz 和其他选项。
【问题讨论】:
-
那么
name1与p1的区别是什么?你有白名单吗?option p1会发生什么? -
option jhfgudfbs4 ^%#*$)有效吗? -
它应该会失败。选项和名称是必需的。正如我在问题中所写的那样,之后的其他选项应该完全匹配。我会更新我的问题,所以很清楚。
-
目前还不清楚。您声明“虽然 name 对任何 ASCII 字符组合都有效”。
p1是一个 ASCII 字符组合。 -
你的意思是指定
name后面必须跟一个数字吗?
标签: regex go regex-lookarounds