Нашел ответ очень быстро после публикации вопросов. Тем не менее, следовал инструкции, которая гласила, что @login_required для использования. Тем не менее, правильный декортатор, который будет использоваться:
@protected_resource()
В целом это - боль для записи регулярного выражения, не содержащего конкретную строку. Мы должны были сделать это для моделей вычисления - Вы берете NFA, который достаточно легко определить и затем уменьшить его до регулярного выражения. Выражение для вещей, не содержащих "кошку", было приблизительно 80 символами долго.
Править: Я только что закончил и да, это:
aa([^a] | a[^a])aa
Вот очень краткое учебное руководство. Я нашел некоторые большие прежде, но я больше не вижу их.
Все, в чем Вы нуждаетесь, является неохотным квантором:
regex: /aa.*?aa/
aabbabcaabda => aabbabcaa
aaaaaabda => aaaa
aabbabcaabda => aabbabcaa
aababaaaabdaa => aababaa, aabdaa
Вы могли использовать отрицательное предвидение также, но в этом случае это - просто более подробный путь, выполняют то же самое. Кроме того, это немного более хитро, чем gpojd разобрал его, чтобы быть. Предвидение должно быть применено в каждом положении, прежде чем точке позволят использовать следующий символ.
/aa(?:(?!aa).)*aa/
Что касается подхода, предложенного Claudiu и finnw, это будет работать хорошо, когда строка сигнальной метки будет только двумя символами долго, но (как подтвержденный Claudiu) это является слишком громоздким для более длинных строк.
Силой Google я нашел пост в блоге от 2007 года, который дает следующий regex, который соответствует строке, которая не содержит определенную подстроку:
^((?!my string).)*$
Он работает следующим образом: он ищет ноль или более (*) символов (.), которые не начинаются (?! - отрицательный заголовок) вашей строки, и он устанавливает, что вся строка должна состоять из таких символов (с помощью якорей ^ и $). Или по-другому:
Вся строка должна состоять из символов, которые не начинают данную строку, что означает, что строка не содержит данной подстроки.