我试图用2个条件制作正则表达式,这2个条件中至少有1个必须为真,但两者都是true也是允许的。 这是我的正则表达式:
\(?<=\]\s)(word1|word2)(?=\s\[)\
(?<=\]\s)
或(?=\s\[)
必须为真,但它们也可能都是真的,但至少为1!
example:
] word1 - true
word1 [- true
] word1 [- true
word1 - false
匹配总是在第一个结果上出现(在结果数组中'output_array [0]必须是'word1')这就是为什么我不想使用|
谢谢你的帮助
答案 0 :(得分:4)
我能想到的唯一相对简单的解决方案是复制单词列表并将它们分成两个选项:
((?<=\]\s)(word1|word2)|(word1|word2)(?=\s\[))
修改:替代方案是(\]\s)?(word1|word2)(?=(?(1)|\s\[))
。这只需要插入一个单词列表。请记住,我已从这一个中移除了lookbehind,并将其替换为一个组 - 这可能不是您正在寻找的,具体取决于您的要求。我使用了Jerry链接的regex101页面来测试它:http://regex101.com/r/mB7vM2(谢谢Jerry)。
答案 1 :(得分:3)
拥有一个大or
怎么样?
(?<=\]\s)(word1|word2)|(word1|word2)(?=\s\[)
经过测试here。
编辑:这个会在同一个结果数组中返回word1
或word2
:
((?<=\]\s)(?:word1|word2)|(?:word1|word2)(?=\s\[))
重新测试here。
答案 2 :(得分:2)
另一种方法是使用条件测试(如果支持),例如:
(?<=(\])\s|)(word1|word2)(?(-2)|(?=\s\[))