понимание регулярных выражений с помощью обозначения массива - PullRequest
4 голосов
/ 14 апреля 2011

Я встречал этот фрагмент кода:

erb = "#coding:UTF-8 _erbout = ''; _erbout.concat ..." # string is cut
erb[/\A(#coding[:=].*\r?\n)/, 1]

Я знаю, как работает регулярное выражение, но меня смущает запись массива.Что значит поместить регулярное выражение в [], что означает второй аргумент 1?

Ответы [ 2 ]

3 голосов
/ 14 апреля 2011

str[regexp] на самом деле является методом класса String, вы можете найти его здесь http://www.ruby -doc.org / core / classes / String.html # M001128

Второй аргумент 1 вернет текст, соответствующий первому подшаблону #coding[:=].*\r?\n, еще один пример для вашего лучшего понимания:

"ab123baab"[/(\d+)(ba+).*/, 0] # returns "123baab", since it is the complete matched text, ,0 can be omitted also
"ab123baab"[/(\d+)(ba+).*/, 1] # returns "123", since the first subpattern is (\d+)
"ab123baab"[/(\d+)(ba+).*/, 2] # returns "baa", since the second subpattern is (ba+)
2 голосов
/ 14 апреля 2011

Скобки - это метод String.См. http://www.ruby -doc.org / core / classes / String.html :

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

1 означает, что возвращается то, что соответствует шаблону внутри скобки.

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