В недавнем интервью мне было предложено расшифровать это регулярное выражение
^\^[^^]
Не могли бы вы помочь мне. Также, пожалуйста, предоставьте несколько ссылок, где я могу изучить регулярное выражение для интервью.
В недавнем интервью мне было предложено расшифровать это регулярное выражение
^\^[^^]
Не могли бы вы помочь мне. Также, пожалуйста, предоставьте несколько ссылок, где я могу изучить регулярное выражение для интервью.
Он соответствует строкам, начинающимся с ^
, за которым следует любой символ, отличный от ^
.
Таким образом, он будет соответствовать:
^foo
^b
но не
foo
^^b
Объяснение:
Caret (^
) является метасимволом регулярного выражения с двумя разными значениями:
Вне класса символов (1-е использование в вашем регулярном выражении) он работает как начало привязки.
Внутри класса символов он действует как negator , если используется как первый символ класса символов (третий используется в вашем регулярном выражении).
Предшествующее регулярное выражение с \
ускоряет его (делает его неспецифичным). Второе использование ^
в вашем регулярном выражении экранируется и соответствует строке ^
в строке.
Внутри класса символов a ^
, который не является первым символом класса символов, обрабатывается буквально. Итак, 4-е использование в вашем регулярном выражении - это буквальный ^
.
Еще несколько примеров, чтобы сделать это ясно:
^a
: Соответствует началу строки
с a
^ab
: Соответствует началу строки
с a
, за которым следует b
[a]
: Соответствует строке, которая
имеет a
[^a]
: Соответствует строке, которая
не имеет a
^a[^a]
: соответствует строке
начиная с a
, за которым следует любое
кроме a
.Я тестирую это регулярное выражение здесь, однако оно не кажется действительным.
Первый ^
обозначает начало строки.
Первый \
избегает следующего \
.
Таким образом, второе "^" не экранировано
Наконец, первый карет внутри квадратных скобок [^
действует как отрицание, а второй ^]
не экранируется, поскольку результат недействителен.
IMHO правильное регулярное выражение должно быть ^\^[^\^]
Ребята, любезно подтвердите. Большое спасибо
Сопоставление начала строки или строки за которым следует буквальный \ за которым следует начало строки или строки за которым следует любой символ, который не является пространством, возвратом или новым символом строки
Первый ^
- начало строки.
Второй - это буквальный символ ^
(\
, чтобы избежать другого обычного значения ^
)
Третий - сказать
класс символов, который не включает символ
^
Пример для показа с помощью 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"