Что означает это регулярное выражение? - PullRequest
12 голосов
/ 03 ноября 2010

В одном из недавних интервью меня попросили расшифровать это регулярное выражение

^\^[^^]

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

Ответы [ 4 ]

30 голосов
/ 03 ноября 2010

Соответствует строкам, которые начинаются с ^, за которыми следует любой символ , отличный от ^.

Так что будет соответствовать:

^foo
^b

но не

foo
^^b

Пояснение:

Caret (^) - метасимвол регулярного выражения с двумя различными значениями:

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

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

Предшествующее регулярному выражению с \ ускользает от него (делает его не специальным). Второе использование ^ в вашем регулярном выражении экранировано и соответствует литералу ^ в строке.

Внутри класса символов ^, который не первый символ класса символов, обрабатывается буквально. Таким образом, 4-е использование в вашем регулярном выражении - буквальное ^.

Еще несколько примеров, чтобы прояснить ситуацию:

  • ^a: соответствует началу строки с a
  • ^ab: соответствует началу строки с a, за которым следует b
  • [a]: соответствует строке, которая имеет a
  • [^a]: соответствует строке, которая не имеет a
  • ^a[^a]: соответствует строке начиная с a, за которым следует любой символ, отличный от a.
3 голосов
/ 03 ноября 2010

Я тестирую это регулярное выражение здесь , однако, оно кажется недействительным.
Первый ^ обозначает начало строки.
Первый \ экранирует следующий \.
Таким образом, второй «^» не избежал Наконец, первая каретка в квадратных скобках [^ действует как отрицание, а вторая ^] не экранируется, так как результат недопустим.

ИМХО правильное регулярное выражение должно быть ^\^[^\^]
Ребята, прошу подтвердить. Большое спасибо

2 голосов
/ 03 ноября 2010

Первый ^ - это начало строки.

Второй - буквальный символ ^ (\ - чтобы избежать другого обычного значения ^)

Третий - сказать

класс символов, который не включает в себя символ ^

Некоторые примеры использования Ruby:

ruby-1.9.2-p0 > "hello" =~ /^h/    # it found a match at position 0
 => 0 

ruby-1.9.2-p0 > "hello" =~ /^e/    # nil means can't find it
 => nil 

ruby-1.9.2-p0 > "he^llo" =~ /\^/   # found at position 2
 => 2 

ruby-1.9.2-p0 > "he^llo"[/[^^]*/]  # anything repeatedly but not including the ^ character
 => "he" 
2 голосов
/ 03 ноября 2010

Соответствует началу строки или строки, за которыми следует литерал \, за которым следует начало строки или строки, за которым следует любой символ, который не является пробелом, символом возврата или символом новой строки

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