Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

Во-первых, %u ничего особенного в рубиновом регулярном выражении:

[email protected] ~ $ irb
irb(main):001:0> '%u'.gsub(/%u/,'heyhey')
=> "heyhey"

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

Строки, разделенные косой чертой, обычные выражения. Персонажи сразу после последней косой черты обозначает вариант регулярного выражения. Вариант я означает, что регулярное выражение нечувствителен к регистру. Вариант я означает что регулярное выражение подстановка выражения только один раз при в первый раз. Вариант x означает расширенное регулярное выражение, что означает пробелы и commens разрешены в выражении. Вариант p обозначает режим 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 'в пределах этого не захватывающего группа.

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

Удачи!

Ответ 3

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

>> rx = /(ab(cd)ef)/
>> s = "-abcdef-abcdef"
>> s.gsub(rx) { $2 }
=> "cdgh-cdghi"

Ответ 4

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

Ответ 5

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

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

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