Подтвердить что ты не робот

Regex to * not * соответствует любым символам

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

Мое текущее регулярное выражение для этого - "\^.*"

Проблема заключается в том, что он не соответствует символам, как планировалось... но для одного соответствия он действительно работает. Строка, которая не работает, это ^ @jj (в основном все, что имеет ^...).

Каким будет лучший способ не совместить персонажей? Я думал об удалении \, но только это превратит "не" в "начало с"...

4b9b3361

Ответ 1

Символ ^ не означает "не", кроме внутри класса символов ([]). Если вы хотите ничего не сопоставить, вы можете использовать отрицательный lookahead, который соответствует чему-либо: (?!.*).

Ответ 2

Простое и дешевое регулярное выражение, которое никогда не будет соответствовать чему-либо, должно совпадать с чем-то, что просто неприменимо, например: \b\B.

Это просто невозможно для соответствия этого регулярного выражения, поскольку это противоречие.

Ссылки

Ответ 3

Еще один очень хорошо поддерживаемый и быстрый шаблон, который не соответствовал бы чему-либо, гарантированному постоянным временем:

$unmatchable pattern $anything goes here и т.д.

$, конечно, указывает конец строки. Никакие символы не могли пойти после $, поэтому дальнейшие переходы состояния не могли быть сделаны. Дополнительным преимуществом является то, что ваш шаблон интуитивно понятен, самоописателен и читабельен!

Ответ 4

Вместо того, чтобы пытаться не сопоставить какие-либо символы, почему бы не просто совместить все символы? ^.*$ должен сделать трюк. Если вам не нужно сопоставлять какие-либо символы, попробуйте ^\j$ (Предположим, что ваш механизм регулярных выражений не будет вызывать ошибку, если вы предоставите ему недопустимый класс символов. Если это так, попробуйте ^()$. Быстрый тест с RegexBuddy предполагает, что это может сработать.

Ответ 5

^ это не только в классе (например, [^ a-z], означающем ничего, кроме a-z). Вы обратили его в буквальный символ ^ с обратной косой чертой.

То, что вы пытаетесь сделать, это [^] *, но это не законно. Вы можете попробовать что-то вроде

" {10000}"

который соответствовал бы точно 10 000 пробелов, если это больше, чем ваш максимальный вход, его никогда не следует сопоставлять.

Ответ 6

((?iLmsux))

Попробуйте это, оно будет соответствовать только в том случае, если строка пуста.

Ответ 7

Пустое регулярное выражение

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

Невозможное регулярное выражение

Другое решение - создать невозможное регулярное выражение. Я обнаружил, что $-^ для вычисления занимает всего два шага, независимо от размера вашего текста (https://regex101.com/r/yjcs1Z/1).

Для справки:

  • $^ и $. сделать 36 шагов для вычисления → O (1)
  • \b\B делает 1507 шагов на моем примере и увеличивается с числом символов в вашей строке → O (n)

Ответ 8

Вы вообще ничего не хотите комбинировать? Негативные образы кажутся очевидными, но могут быть медленными, возможно, ^$ (только для пустых строк) в качестве альтернативы?

Ответ 9

Вы пробовали это простое регулярное выражение? [^.]*

Ответ 10

Eh Я знаю, что это немного поздно, но вы можете просто не читать какие-либо данные, если регулярное выражение пуст