Ваша миссия - написать кратчайшее правильное регулярное выражение, которому не может соответствовать ни одна строка, включая пустую строку.
Материалы должны иметь эту форму («буквенное обозначение»):
/pattern/optional-flags
Самое короткое регулярное выражение выигрывает. Размер регулярного выражения учитывается в символах. (включая косые черты и флаги)
Пожалуйста, объясните, как работает ваше регулярное выражение (если оно не тривиально)
Спасибо и веселитесь!
Ответы:
6 символов
Далее следуют ответы Примо и Питера Тейлора, а также подсказка от
man perlre
:/(?!)/
Это perl-совместимое регулярное выражение соответствует пустой строке, за которой не следует другая пустая строка.
источник
/x\by/
, но если бы мне когда-либо приходилось использовать такое регулярное выражение - по любой причине - тогда этот ответ также самый ясный)/(*FAIL)/
наверное, понятнее. (И фактическиman perlre
отдал это, упомянув, что мое фактически расширяется до его внутреннего.)/(*FAIL)/
не такой портативный, хотя. И даже в Perl, я думаю, это более неясная особенность, чем негативная перспектива.-Mre=debug
) говорит, что(?!)
оптимизирована в оптимизатор(*FAIL)
Perl regex (OPFAIL
согласно-Mre=debug
). Кроме того, я не думаю, что видел(*FAIL)
за пределами Perl 5 (и Perl 6, где он называется<!>
).8 символов
Нам нужна строка, содержащая символ, который является одновременно
a
иb
, что, очевидно, невозможно.источник
/(?!x)x/
выглядит еще более невозможным ;-)5 символов
В отличие от всех, кто злоупотребляет
$
и^
... на самом деле это работает в Perl:\A
соответствует началу строки.источник
^
тоже работает .6 символов
На основании ответа Свена Хоэнштейна .
источник
8 символов
Граница слова (
\b
), окруженная символами «слово» (\w
- один из[_a-zA-Z0-9]
). Это невозможно сопоставить, так как один из символов, предшествующих или следующих за границей слова, должен быть символом, не являющимся словом.Кстати: это похоже на непревзойденное выражение
где
\W
означает не «слово» символ.источник
/
засчитываются. См . Запись OP, например . Это отличная запись, хотя!4 символа
ищет «а» после конца строки.
или же
ищет перед началом строки.
источник
^
и$
в «незаконные» позиции, они будут рассматриваться как обычные символы. Ваш первый пример соответствует буквально$a
вsed
и , возможно , другие программы.echo 'a^b' | grep 'a^b'
противecho 'a^b' | grep -E 'a^b'
. Проверьте 9.4.9 ERE Expression5 персонажей
/$.^/
/$^/
будет соответствовать пустой строке, тогда как наличие символа между ними не будет.источник
"$a^"
(или что-нибудь вместо'a'
) в Perl ( и, возможно, sed ). Все еще хороший, хотя!$.
как переменную текущего номера строки. Который может быть пустым, в этом случае это будет/^/
.^
и$
'$^'
с помощью grep, но, к сожалению, он соответствовал строке'$^'
. Smartass grep.9 символов
Я не уверен, но
/[^\S\s]/
должен быть непревзойденным, поскольку это означает не любой персонаж, но по крайней мере один из них.источник
+
.6 персонажей
Я думаю, что это регулярное выражение, которое я сделал, будет работать:
Он соответствует границе слова (
\b
), которая не является границей слова (\B
). Что такое навязывание - я действительно должен тебе это объяснить?источник
4 персонажа
(Только вкус ECMAScript)
В других вариантах это недопустимый класс символов (
]
он будет считаться символом в классе, поэтому выражение недопустимо, поскольку класс никогда не закрывается), но стандарт ECMAScript принимает пустые классы символов. Так как это класс, он должен соответствовать символу (так что пустые строки не совпадают), но так как ни один символ не включен, ни один фактический символ также не будет соответствовать.источник
/[]{0}/
. (Ps. Хотя мой собственный ответ частично похож на ваш, я на самом деле читаю ваш после написания моего.)/[]/.test("")
. это возвращает ложь. класс символов никогда не может совпадать с пустой строкой, даже если он не содержит символов (я думаю, они реализованы как «ЕСЛИ следующий символ в строке является одним из перечисленных, соответствует; ELSE сбой»)./[]{0}/
является допустимым (в ECMAScript) и соответствует пустой строке ... однако я не уверен, насколько это относится к моему ответу.6 символов
Притяжательный квантификатор ищет как можно больше б, затем еще 1. 6 символов, но точки для симметрии?
источник
6 персонажей
Не победитель, но я думал, что это было весело. grep и Python оба barf на этом, но Perl, кажется, согласен с этим.
Кажется, очень зависит от реализации (что неудивительно, учитывая его странность). Боб сообщает ниже, что это соответствует чему-либо в движке регулярных выражений JavaScript.
источник
Может быть, немного обманывают, но ...
… Не имеет себе равных в регулярных выражениях POSIX практически во всех, если не во всех реализациях. BASIC RE и EXTENDED RE, даже.
И POSIX RE не нужны эти надоедливые косые черты и флаги, которые есть у PCRE.
источник
0
не работает в PERL."0"=~0
это правда ...\0
ITYM? Да, большинство реализаций perlre (1) и PCRE используют не строки C, а ограниченные по размеру буферы, в которых этот прием не будет работать, но большинство реализаций POSIX RE работают со строками C.5 символов
Соответствует строке, которая начинается с любого отдельного символа перед началом строки.
источник
".^"
re.findall(r'^.^', '.^', re.DEBUG)
^
и.
метасимволы не буквальные, которые нужно экранировать4 символа:
Работает с GNU grep 2.5.1 и egrep.
источник
/.^/
= 4 символа//
? это не требуется везде ;-)/
черт, см. Исходный вопрос («включая косые черты и флаги») и запись ОП .Perl 6 (5 символов)
Злоупотребление правилами Сорта (потому что регулярные выражения Perl 6 отличаются и несовместимы с регулярными выражениями по стандарту), но мне все равно.
<!>
Правило сообщает Perl 6, что регулярное выражение не совпадает.источник
6 байт
Аббревиатура для
(*FAIL)
, поддерживаемая Perl-совместимыми движками регулярных выражений. Спасибо @HamZa за указание на это.9 байт
Должен работать с любым движком регулярных выражений, который вообще поддерживает глаголы. Я не уверен, что это действительно нужно играть в гольф дальше.
источник
(*FAIL)
- глагол, который всегда терпит неудачу./(*F)/
:)4 символа
Нужен любой символ после окончания строки
источник
$
это особенное только в конце шаблона.4 символа с косой чертой 2 без
В движке регулярных выражений языка TXR пустой класс
[]
символов не соответствует ни одному символу и, следовательно, не содержит строку. Он ведет себя так, потому что класс символов требует совпадения символов, а когда он пуст, он указывает, что ни один символ не может его удовлетворить.Другой способ состоит в инверсном «множество всех строк , включая пустые» регулярное выражение с
/.*/
помощью комплемента оператора:/~.*/
. Дополнение к этому набору вообще не содержит строк и поэтому не может ничего совпадать.Все это документировано на странице руководства:
Косые черты не являются частью синтаксиса регулярных выражений как таковых; они просто пунктуация, которая ограничивает регулярные выражения в нотации S-выражения. Свидетель:
источник
6 символов
(или 4, в зависимости от того, как вы на это смотрите)
источник
Это регулярное выражение с 5 символами.
Это соответствует пустой группе 1 или более раз.
РЕДАКТИРОВАТЬ:
Удален мой ответ для других ароматов:
Все, что не является числом внутри {}, будет соответствовать тексту.
Этот будет соответствовать ". {- 1}"
источник
5 персонажей
Надеюсь, это не звучит глупо:
/[]+/
источник
То, что заканчивается прежде, чем началось ...
источник
""
, это действительно соответствует строке , содержащей эти два буквенных символов:"$^"
.