有没有办法正则表达式匹配`|`运算符中标记的所有组合
Is there a way regex will match all the combinations of the tokens in `|` operator
我正在为 nand2tetris 项目做解析器。我想检查目标字段是否是 M|D|MD|A|AM|AD|AMD
以及它们的不同组合方式,例如 MA
而不仅仅是 AM
。
^(M|D|MD|A|AM|AD|AMD)\s*=$
此正则表达式正确匹配 AM=
,但不匹配 MA=
。
我不想列出这些标记的所有可能组合,有没有办法简单地做到这一点?
应该这样做:
^(?=[MDA]+$)(?!.?(.).?).{1,3}$
否定先行尝试匹配两个 "M"
、两个 "D"
或两个 "A"
。
正向先行仅将字符串中的字符限制为"M"
、"D"
和"A"
。这不是必需的,但它允许我在其余部分使用 .
,而不是 (?![MDA]?([MDA])[MDA]?...)
,这可能使它更容易阅读。
我正在为 nand2tetris 项目做解析器。我想检查目标字段是否是 M|D|MD|A|AM|AD|AMD
以及它们的不同组合方式,例如 MA
而不仅仅是 AM
。
^(M|D|MD|A|AM|AD|AMD)\s*=$
此正则表达式正确匹配 AM=
,但不匹配 MA=
。
我不想列出这些标记的所有可能组合,有没有办法简单地做到这一点?
应该这样做:
^(?=[MDA]+$)(?!.?(.).?).{1,3}$
否定先行尝试匹配两个 "M"
、两个 "D"
或两个 "A"
。
正向先行仅将字符串中的字符限制为"M"
、"D"
和"A"
。这不是必需的,但它允许我在其余部分使用 .
,而不是 (?![MDA]?([MDA])[MDA]?...)
,这可能使它更容易阅读。