2

我试图用 2 个条件制作正则表达式,这 2 个条件中的至少 1 个必须为真,但也允许两个条件都为真。这是我的正则表达式:

\(?<=\]\s)(word1|word2)(?=\s\[)\

(?<=\]\s)or必须为(?=\s\[)真,但它们也可能都为真,但至少为 1!

example:
] word1 - true
word1 [- true
] word1 [- true
word1 - false

比赛总是在第一个结果上出现(在结果数组中,所以'output_array [0]必须是'word1')所以这就是为什么我不想使用| 感谢帮助

4

3 回答 3

4

我能想到的唯一相对简单的解决方案是复制单词列表并将它们分成两个选项:

((?<=\]\s)(word1|word2)|(word1|word2)(?=\s\[))

编辑:另一种选择是(\]\s)?(word1|word2)(?=(?(1)|\s\[)). 这只需要插入一个单词列表。请记住,我已经从这个中删除了lookbehind,并将其替换为一个组 -这可能不是您要查找的内容,具体取决于您的要求。我使用 Jerry 链接到的 regex101 页面对其进行测试:http ://regex101.com/r/mB7vM2 (谢谢 Jerry)。

于 2013-05-31T12:19:17.160 回答
3

来个大号or怎么样?

(?<=\]\s)(word1|word2)|(word1|word2)(?=\s\[)

在这里测试。

编辑:这个将返回word1word2在相同的结果数组中:

((?<=\]\s)(?:word1|word2)|(?:word1|word2)(?=\s\[))

并在这里重新测试。

于 2013-05-31T12:19:38.823 回答
2

另一种方法是使用条件测试(如果支持),例如:

(?<=(\])\s|)(word1|word2)(?(-2)|(?=\s\[))
于 2013-05-31T13:37:51.713 回答