2008-09-15 2 views
11

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

+0

Зачем вам нужно `regex` здесь, вы можете подумать о некоторых других вариантах, таких как` readonly input`, if (input.length <0) ..., if (! Value) – 2014-10-29 12:19:32

ответ

10

Вероятно, это:

[^\w\W] 

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

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

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

$.^ 

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

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

Пустое опережение/за должно работать:

(?<!) 
+0

Как насчет пустой строки? – 2008-09-15 13:03:21

-1

EDIT: [^ \ п \ г \ ш \ s]

+0

Не было бы принято принимать все входные данные строки? Я думаю, вы можете отказаться от этого утверждения. – 2008-09-15 12:44:45

+0

Это полная противоположность тому, что я ищу. В вашем регулярном выражении все, что мне нужно, - это регулярное выражение, которое отвергает все. – Kasper 2008-09-15 12:45:37

+0

Unkwntech, ваше регулярное выражение будет соответствовать символам пунктуации и т. Д. – aku 2008-09-15 12:53:59

1

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

if (inputString != "") 
    doSomething() 
-1

Ну,

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

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

Надеется, что это помогает!

4
(?=not)possible 

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

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

1

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

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

в JavaScript например:

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

, но тогда вы можете просто сделать

if (!foo) 

вместо, а @ [январь-Хани] сказал.

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

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

0

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

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

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

2

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

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

0

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

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

5

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

.^ 

и

$. 

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

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