Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式匹配每种情况和通配符条件_Regex - Fatal编程技术网

Regex 正则表达式匹配每种情况和通配符条件

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

如何编写符合以下条件的正则表达式:

其中,事件“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;;;;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必须改变这一点以满足他们的需求。例如,如果;是键、值对之间的有效分隔符。然后可以很容易地修改正则表达式以适应这种情况。所有的评论都很好。更新了模式。