匹配一个表达式中不包含其他模式的特定模式

时间:2019-07-11 17:48:43

标签: regex nginx

我正在寻找要在位置匹配中使用的正则表达式,它将与指定的结束模式匹配,而不是在指定的其他模式之后的任何地方。

就像,我有文件:

webgl-0.4.0-alpha.1-gzip-dev/streaming-wasm-gzip-dev.wasm.framework.unityweb
webgl-0.4.0-alpha.1-gzip-dev/streaming-wasm-gzip-dev.data.unityweb

webgl-0.4.0-alpha.1-gzip/streaming-wasm-gzip.wasm.framework.unityweb
webgl-0.4.0-alpha.1-gzip/streaming-wasm-gzip.data.unityweb

我想匹配所有\.unityweb,除了那些dev之后的字符。我需要匹配前两行。我无法对其进行硬编码,因为文件/目录可能被命名为任意。

通常的((?!dev\/).)*$不够用,因为它仍然可以解决问题。也不能在此处添加(?<!dev),因为它只会直接匹配。

我既不了解线索,也不了解正则表达式!

解决方案不必严格地使用正则表达式,也可以基于nginx。

它可能曾经被问过,但是我似乎不知道找到它的正确关键词。

2 个答案:

答案 0 :(得分:0)

您可以使用此

^(?!.*dev.*\.unityweb)(?=.*\.unityweb).*$

enter image description here

Demo

答案 1 :(得分:0)

尝试

^(?!.*?dev\/.*).+\.unityweb$

See the demo here

说明:

  • ^从行首开始
  • (?! _______ )负前瞻
  • .*?dev\/可以任意匹配任意字符,直到达到dev后跟斜杠为止。
  • .*可以任意匹配任意字符
  • 负向超前关闭
  • .+匹配任意一个字符多次
  • \.unityweb-直到到达.unityweb
  • $行尾

    使用完全匹配的内容

编辑

刚意识到您在问题中也有矛盾之处,因为您不想匹配dev/之前的任何内容,但也希望匹配您给出的前两个示例。

可以通过将负前瞻更改为正前瞻来实现:

^(?=.*?dev\/.*).+\.unityweb$

See the demo here