Ruby gsub / regex модификаторы? - PullRequest
       22

Ruby gsub / regex модификаторы?

12 голосов
/ 05 августа 2009

Где я могу найти документацию по модификаторам для gsub? \ a \ b \ c \ 1 \ 2 \ 3% a% b% c $ 1 $ 2% 3 и т.д.?

В частности, я смотрю на этот код ... something.gsub(/%u/, unit) что такое %u?

Ответы [ 5 ]

11 голосов
/ 05 августа 2009

Прежде всего, %u - ничего особенного в регулярном выражении ruby:

mixonic@pandora ~ $ irb
irb(main):001:0> '%u'.gsub(/%u/,'heyhey')
=> "heyhey"

Полная документация по регулярному выражению Ruby 1.8 находится в комплекте документов Ruby:

Строки, разделенные косой чертой, регулярные выражения. Персонажи сразу после последней косой черты обозначает вариант с регулярным выражением. Вариант я означает, что регулярное выражение нечувствителен к регистру. Вариант я имею в виду это регулярное выражение делает замена выражения только один раз в в первый раз его оценили. Вариант х означает расширенное регулярное выражение, что означает пробелы и комменсы разрешены в выражении. Вариант р обозначает режим POSIX, в котором переводы строки рассматриваются как нормальный характер (соответствует точкам).

% r / STRING / - это другая форма регулярное выражение.

^
    beginning of a line or string 
$
    end of a line or string 
.
    any character except newline 
\w
    word character[0-9A-Za-z_] 
\W
    non-word character 
\s
    whitespace character[ \t\n\r\f] 
\S
    non-whitespace character 
\d
    digit, same as[0-9] 
\D
    non-digit 
\A
    beginning of a string 
\Z
    end of a string, or before newline at the end 
\z
    end of a string 
\b
    word boundary(outside[]only) 
\B
    non-word boundary 
\b
    backspace(0x08)(inside[]only) 
[ ]
    any single character of set 
*
    0 or more previous regular expression 
*?
    0 or more previous regular expression(non greedy) 
+
    1 or more previous regular expression 
+?
    1 or more previous regular expression(non greedy) 
{m,n}
    at least m but most n previous regular expression 
{m,n}?
    at least m but most n previous regular expression(non greedy) 
?
    0 or 1 previous regular expression 
|
    alternation 
( )
    grouping regular expressions 
(?# )
    comment 
(?: )
    grouping without backreferences 
(?= )
    zero-width positive look-ahead assertion 
(?! )
    zero-width negative look-ahead assertion 
(?ix-ix)
    turns on (or off) `i' and `x' options within regular expression.

Эти модификаторы локализованы внутри ограждающая группа (если есть). (? IX-IX:) включает (или выключает) опции i' and x 'в пределах этого захвата группа.

Обозначение и выражение обратной косой черты замена доступна в обычном выражения.

Удачи!

9 голосов
/ 05 августа 2009

Quickref в Zenspider содержит раздел, объясняющий , какие escape-последовательности могут использоваться в регулярном выражении , и один, перечисляющий псевдопеременные , которые устанавливаются совпадением регулярного выражения. Во втором аргументе gsub вы просто пишете имя переменной с обратной косой чертой вместо $, и она будет заменена значением этой переменной после применения регулярного выражения. Если вы используете строку в двойных кавычках, вам нужно использовать две обратные косые черты.

При использовании блочной формы gsub вы можете просто использовать переменные напрямую. Если вы возвращаете строку, содержащую, например, \ 1 из блока, который не будет заменен на $ 1. Это происходит только при использовании формы с двумя аргументами.

5 голосов
/ 02 декабря 2009

Если вы используете block в sub / gsub, вы можете получить доступ к таким группам:

>> rx = /(ab(cd)ef)/
>> s = "-abcdef-abcdef"
>> s.gsub(rx) { $2 }
=> "cdgh-cdghi"
1 голос
/ 06 августа 2009

Для Ruby 1.9 Онигурума есть хорошая документация регулярного выражения здесь .

0 голосов
/ 31 марта 2014

gsub также является функцией подстановки строк в языке LUA.

В регулярном выражении LUA язык% u представляет класс символов верхнего регистра. т.е. он будет соответствовать всем заглавным буквам. Точно так же% l будет соответствовать нижнему регистру.

Шаблоны классов LUA Regex

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