Regex 正则表达式匹配每种情况和通配符条件
如何编写符合以下条件的正则表达式: 其中,事件“eVar7=”的每个实例都包含以下“unv” 这应该是错误的: );AA;;;;eVar7=nr_unv,;AA;;;;eVar7=br_unavail,;AA;;;;eVar7=sugg,;AA;;;;eVar7=sugg,;AA;;;;eVar7=sugg 这应该是真的:Regex 正则表达式匹配每种情况和通配符条件,regex,Regex,如何编写符合以下条件的正则表达式: 其中,事件“eVar7=”的每个实例都包含以下“unv” 这应该是错误的: );AA;;;;eVar7=nr_unv,;AA;;;;eVar7=br_unavail,;AA;;;;eVar7=sugg,;AA;;;;eVar7=sugg,;AA;;;;eVar7=sugg 这应该是真的: ;AA;;;;eVar7=nr_unv,;AA;;;;eVar7=br_unavail,;AA;;;;eVar7=nr_unv,;AA;;;;eVar7=nr_=11,;AA
;AA;;;;eVar7=nr_unv,;AA;;;;eVar7=br_unavail,;AA;;;;eVar7=nr_unv,;AA;;;;eVar7=nr_=11,;AA;;;;eVar7=nr_unvasdfasdferwgf此正则表达式的作用正好相反。如果存在匹配项,则表示您不想要它:
eVar7=(?![^;]*?unav)
它使用了一个消极的前瞻。意思是在EvAR7匹配之后,中间不应该有“unav”的东西。如果是的话,它是匹配的
这只是为了让你走上正确的轨道,因为你的例子有很多要考虑的问题。例如,这种“UNV”模式究竟应该存在于何处。eVar7和“unv”等之间允许哪些字符。请随意更改正则表达式以满足您的需要。但这并不总是有效的。例如,字符串
eVar7=GARBAGE;;;eVar7=nr_unv
将与您的正则表达式不匹配,这意味着它应该是正常的。但是,正如您所看到的,第一个eVar7后面是垃圾。它不匹配,因为它只是跳过它,并在末尾找到unv
。从技术上讲,第一个eVar7后面当然是unv
,但OP最有可能的意思是“直接”跟随,即在找到另一个eVar7之前。+1-比我天真的计算“ever7=”和“unv”的匹配数并查看它们是否相等的想法要聪明得多。编辑:根据Daniël的评论,我无法删除我的+1。我相信他也会对我的想法提出批评。不管这个问题如何,你可以在正则表达式中省略最后一个*?
,给出eVar7=(?!*?unan)
,最好使用[^;]
而不是,eVar7=(?![^;]*unan)
@DaniëlKnippers:是的,我知道。就像我提到的,OP必须改变这一点以满足他们的需求。例如,如果;是键、值对之间的有效分隔符。然后可以很容易地修改正则表达式以适应这种情况。所有的评论都很好。更新了模式。