Совпадение всех комбинаций букв и цифр, кроме конкретного слова? - PullRequest
0 голосов
/ 09 марта 2012

Я посмотрел и нашел вещи о негативном взгляде вперед, но я все еще не уверен, что мне следует сделать для этого.У меня есть RewriteRule ^([a-zA-Z0-9]+)/?$, который работает нормально, за исключением того, что теперь я хочу, чтобы он специально исключал слово «помощь» (только «помощь», а не «помощник», «щенок» и т. Д.) И, возможно, небольшое количество других словбудущее.и извините, я знаю, что у меня много подобных вопросов, но я так и не смог выяснить, как применить их именно к этому.

Ответы [ 2 ]

1 голос
/ 09 марта 2012

Apache mod-rewrite должен иметь четко определенный порядок того, как он анализирует RewriteRules, и какое правило он будет соблюдать в случае конфликтов.

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

0 голосов
/ 09 марта 2012

Кроме того, хотите верьте, хотите нет, вы можете написать регулярное выражение, которое соответствует всем буквенно-цифровым строкам, кроме «help».Регулярное выражение ([a-zA-Z0-9]+)/?&~help может быть переписано в регулярное выражение, которое не использует операторы & и ~ (и не) (не широко доступны).

Регулярное выражение выглядит как собачий завтрак, и поэтомуВы действительно не хотите этого делать.Но вот как.

Во-первых, все более короткие буквенно-цифровые коды совпадают.«hel» является приемлемой проблемой, и ни одна другая трехбуквенная / цифровая последовательность:

[a-zA-Z0-9]{1,3}

Мы также можем распознавать последовательности из пяти или более символов;они также не «помогают», включая это:

[a-zA-Z0-9]{5,}

Теперь начинается сложная часть, соответствующая четырехбуквенным последовательностям, которые не помогают.Это означает любые четыре символа, которые не начинаются с h, или любые четыре символа, которые не имеют e в качестве второй буквы.Etc:

[a-gi-zA-Z0-9][a-zA-Z0-9]{3}
[a-zA-Z0-9][a-df-zA-Z0-9][a-zA-Z0-9]{2}
[a-zA-Z0-9]{2}[a-km-zA-Z0-9][a-zA-Z0-9]
[a-zA-Z0-9]{3}[a-oq-zA-Z0-9]

Единственный шаблон из четырех символов, который не соответствует ни одному из них, - это слово «помощь».Он не соответствует первому из-за h, второй из-за e и т. Д.

Итак, объединяя их все вместе с |и закрепление.Сделайте глубокий вдох:

^([a-zA-Z0-9]{1,3}|[a-zA-Z0-9]{5,}|[a-gi-zA-Z0-9][a-zA-Z0-9]{3}|[a-zA-Z0-9][a-df-zA-Z0-9][a-zA-Z0-9]{2}|[a-zA-Z0-9]{2}[a-km-zA-Z0-9][a-zA-Z0-9]|[a-zA-Z0-9]{3}[a-oq-zA-Z0-9])$

Это должен быть новый ключ канала для #unix в сети IRC EFNet.:)

Я собираюсь проверить это?Что ты чокнутый ...

Конечно я сделал, но с седом.Совсем немного.Большинство метасимволов нужно экранировать, упс:

$ sed -n -e '/^\([a-zA-Z0-9]\{1,3\}\|[a-zA-Z0-9]\{5,\}\|[a-gi-zA-Z0-9][a-zA-Z0-9]\{3\}\|[a-zA-Z0-9][a-df-zA-Z0-9][a-zA-Z0-9]\{2\}\|[a-zA-Z0-9]\{2\}[a-km-zA-Z0-9][a-zA-Z0-9]\|[a-zA-Z0-9]\{3\}[a-oq-zA-Z0-9]\)$/p'
a  <- typed
a
aa  <- typed
aa
aaa  <-
aaa
aaaa   <-
aaaa
aaaaa  <-
aaaaa
help   <-  aha, no response from sed
aelp   <-
aelp
helper <-
helper
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...