Регулярное выражение, которое отклоняет весь ввод? - PullRequest
11 голосов
/ 15 сентября 2008

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

Ответы [ 11 ]

10 голосов
/ 15 сентября 2008

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

[^\w\W]

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

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

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

$.^

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

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

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

(?<!)
5 голосов
/ 17 сентября 2008

Стандартные регулярные выражения best (т. Е. Без предварительного просмотра или обратных ссылок), которые отклоняют все входные данные (после @aku выше)

.^

и

$.

Это плоские противоречия: «строка с символом до его начала» и «строка с символом после его конца».

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

4 голосов
/ 15 сентября 2008
(?=not)possible

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

Выражение будет искать «не», а затем искать «возможный», начиная с той же позиции (так как в строке не видны головы).

2 голосов
/ 15 сентября 2008

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

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

1 голос
/ 15 сентября 2008

Для меня это звучит так, как будто вы атакуете проблему неправильно, что именно ты пытаешься решить?

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

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

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

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

if (!foo)

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

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

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

1 голос
/ 15 сентября 2008

Зачем тебе это? Разве простой трюк не поможет? Что-то вроде:

if ( inputString != "" )
  doSomething ()
0 голосов
/ 16 сентября 2008

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

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

0 голосов
/ 15 сентября 2008

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

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

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

0 голосов
/ 15 сентября 2008

Ну

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

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

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

0 голосов
/ 15 сентября 2008

[^ \ x00- \ XFF]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...