is
- тестирование идентичности, ==
- проверка равенства. Это означает, что is
- это способ проверить, являются ли две вещи одинаковыми вещами или просто эквивалентны.
Скажем, у вас есть простой объект person
. Если он называется «Джек» и ему «23 года», он эквивалентен другому 23-летнему Джеку, но его не одному человеку.
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
def __eq__(self, other):
return self.name == other.name and self.age == other.age
jack1 = Person('Jack', 23)
jack2 = Person('Jack', 23)
jack1 == jack2 #True
jack1 is jack2 #False
Они того же возраста, не один и тот же экземпляр человека. Строка может быть эквивалентна другой, но это не тот же объект.
Если Вы просто хотите проверить, допустимо ли регулярное выражение или нет, просто попытайтесь скомпилировать его с тем, какой бы ни язык программирования или библиотека регулярных выражений Вы работаете с.
регулярные выражения Парсинга совсем не тривиально. Как автор RegexBuddy, я был вокруг того блока несколько раз. Если Вы действительно хотите сделать это, используйте regex, чтобы маркировать вход и оставить логику синтаксического анализа процессуальному кодексу. Таким образом, Ваш regex соответствовал бы одному regex маркеру (^
, $
, \w
, (
, )
, и т.д.) за один раз, и Ваш процессуальный кодекс проверит, находятся ли они в правильном порядке.
К сожалению, большинство недействительных регулярных выражений недопустимо из-за ошибок вложения круглых скобок. Это - точно тип строк, которым не могут соответствовать регулярные выражения. (Хорошо, некоторые необычные системы регулярного выражения имеют расширения рекурсии, но это редко)
Как уже сказано, Вы не можете описать регулярные выражения с регулярным выражением из-за их рекурсивного характера. Вам будет нужна контекстно-свободная грамматика для этого.
, Но какова была бы точка наличия такого регулярного выражения, так или иначе? Если Вы просто хотите проверить, корректно ли регулярное выражение, можно просто попытаться использовать его (Pattern.compile(regexp) в Java) и если оно кричит, это не допустимо.
Вам, вероятно, нужен синтаксический анализатор, не regex. Regexes являются мощными инструментами, но не анализируют инструменты. Они не хорошо подходят для вложенных грамматик, например.
От Douglas Crockford Язык программирования JavaScript видео 4 (4):
/\/(\\[^\x00-\x1f]|\[(\\[^\x00-\x1f]|[^\x00-\x1f\\\/])*\]|[^\x00-\x1f\\\/\[])+\/[gim]*/
http://video.yahoo.com/watch/111596/1710658 приблизительно в-17.20.
В зависимости от Вашей цели я сказал бы определенно, возможно.
, Если Вы хотите отфильтровать regexps из где-нибудь, это могло бы оказаться трудным, когда регулярные выражения существуют всех размеров и форм, и они не делают все запускают и заканчиваются наклонными чертами.
, Если просто необходимо знать, допустим ли regexp, существует иначе. В зависимости от языка Вы используете Вас, мог пробовать/ловить
, Если можно быть более конкретными, я мог бы попытаться дать лучший ответ, вопросом является intruiging.
Существует ли регулярное выражение, которое соответствует действительным регулярным выражениям?
По определению, это довольно просто: нет.
Язык всех регексов - это не регулярный язык (просто посмотрите на вложенные скобки), и поэтому не может быть регулярного выражения для его разбора.