Регулярное выражение, которое отклоняет все входные данные?

Можно ли построить регулярное выражение, которое отклоняет все входные строки?

Ответ 1

Возможно, это:

[^\w\W]

\ w - символ слова (буква, цифра и т.д.)
\ W - напротив \w

[^\w\W] - должен всегда терпеть неудачу, потому что любой символ должен принадлежать одному из классов символов -\w или \W

Другие фрагменты:

$.^

$- утверждение позиции в конце строки
^ - утвердить позицию в начале строки
, - любой char

(?#it just a comment inside of empty regex)

Пустой взгляд/сзади должен работать:

(?<!)

Ответ 2

Наилучшие стандартные регулярные выражения (т.е. никакие обратные или обратные ссылки), которые отвергают все входы (после @aku выше)

.^

и

$.

Это плоские противоречия: "строка с символом перед ее началом" и "строка с символом после ее окончания".

ПРИМЕЧАНИЕ. Возможно, некоторые реализации регулярных выражений отклонят эти шаблоны как некорректные (довольно легко проверить, что ^ приходит в начале шаблона и $ в конце... с регулярным выражением), но те, которые я проверил, принимают их. Они также не будут работать в реализациях, которые позволяют ^ и $ соответствовать символам новой строки.

Ответ 3

(?=not)possible

? = является положительным взглядом. Они не поддерживаются во всех вариантах regexp, но во многих.

Выражение будет искать "не", а затем искать "возможно", начиная с той же позиции (так как lookaheads не перемещаются вперед в строке).

Ответ 4

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

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

Ответ 5

Зачем тебе это нужно? Разве не простая, если бы ставка на трюк? Что-то вроде:

if ( inputString != "" )
  doSomething ()

Ответ 6

Мне кажется, что вы атакуете проблему не так, что именно вы пытаетесь решить?

Вы можете сделать регулярное выражение, которое ловит все и отрицает результат.

например, в javascript:

if (! str.match( /./ ))

но тогда вы могли бы просто сделать

if (!foo)

вместо этого, как сказал @[jan-hani].

Если вы хотите встроить такое регулярное выражение в другое регулярное выражение, вы возможно, ищет вместо $или ^ или использовать такие образы, как @[henrik-n].

Но, как я уже сказал, это выглядит как "Мне кажется, мне нужно x, но мне действительно нужна проблема".

Ответ 7

[^\x00-\XFF]

Ответ 8

Это зависит от того, что вы подразумеваете под "регулярным выражением". Вы имеете в виду регулярные выражения на определенном языке программирования или в библиотеке? В этом случае ответ, вероятно, да, и вы можете обратиться к любому из приведенных выше ответов.

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

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

Ответ 9

[^]+ должен это сделать.

В ответ на прилагаемый к нему комментарий aku я тестировал его с помощью онлайн-тестера регулярных выражений (http://www.regextester.com/), и поэтому предположим, что это работает с JavaScript. Я должен признаться, что не тестировал его в "реальном" коде.;)

Ответ 10

EDIT:   [^\П\г\ш\с]

Ответ 11

Ну,

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

Но вы также можете использовать regexp, который соответствует пустым строкам типа ^$ или регулярному выражению, которые не соответствуют словам/пробелам, например [^\w\s]...

Надеюсь, что это поможет!