正则表达式:一个必填词,两个可选词

Regex : one mandatory word, two optionnals

我正在尝试编写符合这些条件的正则表达式

FIRST这个词是必填的;只能出现一次

SECOND 一词可以出现零次或一次

单词 THIRD 可以出现零次或一次

我试过了

^(?=.*?(FIRST))(?=.*?(SECOND))(?=.*?(THIRD))

还有这个

^(?=.*?(FIRST))(?=.*?(SECOND{0,1}))(?=.*?(THIRD{0,1}))

但它不起作用。有什么想法吗?

编辑: 单词顺序任意。

这应该匹配:

Here is FIRST and THIRD

SECOND and FIRST, THIRD !

THIRD

这不应该:

SECOND SECOND FIRST //Second appear twice

SECOND THIRD // First is mandatory

可以应用反逻辑:FIRST、SECOND、THIRD不能出现2次以上,但必须至少有一个FIRST:

^(?!.*THIRD.*THIRD)(?!.*SECOND.*SECOND)(?!.*FIRST.*FIRST)(?=.*FIRST)

this demo

要匹配整个单词,请在单词周围使用 \b 单词边界。如果您需要匹配换行符,请不要忘记 DOTALL/singleline 修饰符(在大多数正则表达式中,它是 /s)。

如果 FIRST 应该在 SECOND 之前,而 SECOND 应该在 THIRD 之前,请再使用两个前瞻:

^(?!.*THIRD.*(?:SECOND|FIRST)) # SECOND or FIRST cannot appear after THIRD
(?!.*SECOND.*FIRST)            # SECOND cannot appear before FIRST
(?!.*THIRD.*THIRD)             # THIRD can only appear one or zero times
(?!.*SECOND.*SECOND)           # SECOND can only appear one or zero times
(?!.*FIRST.*FIRST )            # FIRST can only appear one or zero times
(?=.*FIRST)                    # However, FIRST must appear at least once

another demo