Регулярное выражение, соответствующее действительным регулярным выражениям

Существует ли регулярное выражение, которое соответствует допустимым регулярным выражениям?

(Я знаю, что есть несколько разновидностей регулярных выражений. Один подойдет.)

12.12.2008 13:49:44
Почему вы хотите регулярное выражение? Возможно, есть другой способ решить эту проблему.
Hans-Peter Störr 12.12.2008 15:51:56
Если вы хотите проверить, действителен ли ваш шаблон или нет, вы можете просто сделать следующее. preg_match( "{your_pattern}", '' ), Если это не так, вы получите false.
Eugene 2.06.2011 11:40:05
7 ОТВЕТОВ
РЕШЕНИЕ

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

Разбор регулярных выражений далеко не тривиален. Как автор RegexBuddy , я был в этом блоке несколько раз. Если вы действительно хотите это сделать, используйте регулярное выражение для токенизации ввода и оставьте логику синтаксического анализа для процедурного кода. То есть, ваше регулярное выражение будет соответствовать один Regex маркер ( ^, $, \w, (, )и т.д.) , в то время, и ваш процессуальный кодекс будет проверить , если они находятся в правильном порядке.

38
13.06.2014 01:13:13

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

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

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

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

-1
12.12.2008 13:58:46

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

15
12.12.2008 14:26:56

Вам, вероятно, нужен анализатор, а не регулярное выражение. Регулярные выражения являются мощными инструментами, но не являются инструментами синтаксического анализа. Например, они плохо подходят для вложенных грамматик.

5
12.12.2008 15:37:46

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

Но какой смысл иметь такое регулярное выражение? Если вы просто хотите проверить правильность регулярного выражения, вы можете просто попытаться использовать его (Pattern.compile (regexp) в Java) и, если оно кричит, оно недопустимо.

9
12.12.2008 15:50:54

Из видео Дугласа Крокфорда « Язык программирования JavaScript» 4 (из 4):

/\/(\\[^\x00-\x1f]|\[(\\[^\x00-\x1f]|[^\x00-\x1f\\\/])*\]|[^\x00-\x1f\\\/\[])+\/[gim]*/

http://video.yahoo.com/watch/111596/1710658 примерно в -17.20.

4
16.07.2010 21:43:30
Хотите дать краткий обзор вместо того, чтобы отправить мне ссылку на видео?
Gavin Miller 26.01.2009 22:47:32
@LFSR Consulting: нет, не знаю. Я поместил информацию о регулярном выражении в моем ответе. Остальная часть видео не имеет отношения к этому вопросу. Я просто дал информацию о цитировании.
kajaco 29.01.2009 18:52:33
FF3 вызывает приведенное выше регулярное выражение как синтаксически неверное !?
ThomasH 22.07.2009 15:53:27
Это регулярное выражение соответствует недействительным регулярным выражениям. [gim]*позволяет более 1 каждого флага. Попробуйте это в своей консоли:'ggg'.match(/[gim]*/);
Aust 8.07.2014 22:46:48

Существует ли регулярное выражение, которое соответствует допустимым регулярным выражениям?

По определению, это довольно просто: нет .

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

41
15.07.2010 20:11:48