我正在尝试创建一个具有两个条件的正则表达式,这两个条件中至少有一个条件必须为真,但这两个条件都为真也是允许的。这是我的正则表达式:
\(?<=\]\s)(word1|word2)(?=\s\[)\(?<=\]\s)或(?=\s\[)必须为真,但它们也可能都为真,但至少为1!
example:
] word1 - true
word1 [- true
] word1 [- true
word1 - false匹配总是在第一个结果上bo (在结果数组中,所以'output_array‘必须是'word1'),所以这就是为什么我不想使用|,谢谢你的帮助
发布于 2013-05-31 20:19:17
我能想到的唯一相对简单的解决方案是复制单词列表,并将它们分成两个选项:
((?<=\]\s)(word1|word2)|(word1|word2)(?=\s\[))编辑:另一种选择是(\]\s)?(word1|word2)(?=(?(1)|\s\[))。这只需要插入一个单词列表。请记住,我已经从这里删除了looking,并将其替换为一个组-这可能不是您正在寻找的,这取决于您的需求。我已经使用了曾傑瑞链接到的regex101页面对其进行了测试:http://regex101.com/r/mB7vM2 (谢谢你,曾傑瑞)。
发布于 2013-05-31 20:19:39
拥有一个大的or怎么样?
(?<=\]\s)(word1|word2)|(word1|word2)(?=\s\[)已测试here。
编辑:这将在相同的结果数组中返回word1或word2:
((?<=\]\s)(?:word1|word2)|(?:word1|word2)(?=\s\[))并重新测试了here。
发布于 2013-05-31 21:37:52
另一种方法是使用条件测试(如果支持),例如:
(?<=(\])\s|)(word1|word2)(?(-2)|(?=\s\[))https://stackoverflow.com/questions/16857039
复制相似问题