Соответствует конкретному шаблону, который не содержит другой шаблон в одном выражении - PullRequest
1 голос
/ 11 июля 2019

Я ищу регулярное выражение для сопоставления местоположений, которое будет соответствовать указанному конечному шаблону, которому нигде не предшествует указанный другой шаблон.

Например, у меня есть файлы:

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) также не может быть добавлен нигде, так как он будет совпадать только раньше.

Я вне подсказок, а также из-за регулярного выражения fu!

Решение не обязательно должно быть строго регулярным выражением, может быть также основано на nginx.

Возможно, его уже спрашивали раньше, но я не могу знать, как правильно найти ключевые слова, чтобы найти его.

Ответы [ 2 ]

0 голосов
/ 12 июля 2019

Попробуйте

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

См. Демонстрацию здесь

Описание:

  • ^ Отначало строки
  • (?! _______ ) Negative Lookahead
  • .*?dev\/ Совпадение с любым символом любое количество раз, пока вы не достигнете dev, за которым следует косая черта
  • .*Совпадение с любыми символами любое количество раз
  • Отрицательный знак закрытия закрывается
  • .+ Совпадение с любым символом более одного раза
  • \.unityweb - до достижения .unityweb
  • $ Конец строки

    Используйте полное совпадение для того, что вам нужно

РЕДАКТИРОВАТЬ

Только что понял, что вы также заявляете о противоречии в своем вопросе, так как вы говорите, что не хотите сопоставлять что-либо с предшествующим dev/, но вы также хотите сопоставить первые два примера, которые вы дали.

Этоэто можно сделать, изменив отрицательный взгляд на положительный взгляд:

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

См. демонстрацию здесь

0 голосов
/ 11 июля 2019

Вы можете использовать это

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

enter image description here

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...