регулярное выражение, чтобы соответствовать всем подпапкам URL, кроме нескольких специальных - PullRequest
0 голосов
/ 24 октября 2018

ОК, я пишу регулярное выражение, которое я хочу сопоставить с определенным путем URL-адреса и всеми подпапками под ним, но с некоторыми исключениями.для контекста, это для использования внутри Verizon Edgecast, который является системой кэширования CDN.он поддерживает регулярные выражения, но, к сожалению, я не знаю «вкус» регулярных выражений, которые он поддерживает, и документация также не ясно об этом.Кажется, поддерживает все основные функции регулярных выражений, и это должно быть все, что мне нужно.к сожалению, для чтения документации требуется учетная запись, но вы можете получить общее представление о edgecast здесь: https://www.verizondigitalmedia.com/platform/edgecast-cdn/

, вот некоторые примеры данных:

help
help/good
help/better
help/great
help/bad
help/bad/worse

и вот регулярное выражениеЯ сейчас использую:

(^help$|help\/[^bad].*)

ссылка: https://regex101.com/r/CBWUDE/1

не работает:

( - start capture group
^ - start of string
help - 1st thing that should match
$ - end of string
| - or
help - another thing that should match
\/ - escaped / so i can match help/
[^bad] - match any single character that isn't b, a, or d
. - any character 
* - any number of times
) - end capture group

Я бы хотел, чтобы первые 4 соответствовали, но непоследние 2, «плохие» или «плохие / худшие» не должны совпадать, а help / everythingelse должно совпадать

это регулярное выражение работает для меня, за исключением того, что help / better не совпадает.Я уверен, что причина не в совпадении, потому что лучше, содержит символ, который появляется внутри «плохо».если я изменю «лучше» на «получатель», то это становится совпадением, потому что в нем больше нет буквы.

так что я действительно хочу, чтобы мои «плохие» соответствовали всему слову «плохо», ине соответствует ни одной вещи с b, a или d.Я попытался использовать границу слова, чтобы сделать это, но не дает мне нужных результатов, но, возможно, у меня просто неправильный синтаксис, вот что я попробовал:

(^help$|help\/[^\bbad\b].*)

, но, похоже, не работает«плохие» URL больше не исключаются, и help / better по-прежнему не соответствует этому.Я думаю, что это потому, что / не является границей слова.Я уверен, что моя проблема с оригинальным регулярным выражением связана с частью:

[^ bad] - соответствует любому отдельному символу, который не b, a или d

, мой вопрос,как я могу превратить [^ bad] во что-то, что не содержит полную строку «bad»?

1 Ответ

0 голосов
/ 24 октября 2018

Вы захотите использовать отрицательный взгляд вперед (?! Плохой) вместо отрицания определенных букв [^ bad]

Я думаю (^ help $ | help \ / (?! bad).*) это то, что вы ищете

Редактировать: если вы имеете в виду что-либо со словом «плохо», а не просто «помочь» / «плохо», вы можете сделать это (?!. * плохо. *) Это помешает вамиз соответствия help / matbadtom например.Полное регулярное выражение: (^ help $ | help \ / (?!. * Плохо. *). *)

...