匹配包含正则表达式但不包含其他字符串的复杂正则表达式

时间:2020-03-10 20:45:15

标签: regex

我正在尝试通过正则表达式匹配一个包含某个正则表达式模式且不包含子字符串的字符串。但是,此子字符串必须位于适合模式其余部分的字符串的某个位置

我正在尝试执行此正则表达式

^(-?NODE1-METHOD1-NODE2-).*(?!NODE3)-METHOD2-+

在这里我将匹配所有包含NODE1-METHOD1-NODE2-的字符串,后跟任何字符,并且没有NODE3,最后将有METHOD2,然后是-

此正则表达式将匹配以下字符串

NODE1-METHOD1-NODE2-METHOD4-NODE5-METHOD5-NODE6-METHOD6-NODE6-METHOD7-NODE7-METHOD2----------------------------

但不是这个

NODE1-METHOD1-NODE2-METHOD4-NODE5-METHOD5-NODE3-METHOD2----------------------------

现在,按照我使用的模式,我无法匹配任何情况。 很高兴学习其他方式来做到这一点。 谢谢

1 个答案:

答案 0 :(得分:2)

在模式.*(?!NODE3)-METHOD2-+中使用此部分,.*将首先匹配,直到字符串的末尾,然后是(?!NODE3),因为字符串的末尾是正确的右边没有NODE3。

您可以在关闭第一组后立即使用否定的超前查询在字符串中其余部分不包含NODE3,(?!.*NODE3)

如果成功,则匹配任何字符,直到遇到METHOD2,然后是1个或多个连字符.*METHOD2-+

^(-?NODE1-METHOD1-NODE2-)(?!.*NODE3).*METHOD2-+

Regex demo

相关问题