сопоставление с образцом в рубине - PullRequest
0 голосов
/ 21 июня 2010

жми любое тело, скажи мне, как работает это выражение

output = "#{output.gsub(/grep .*$/,'')}"

до того, как значение OUTPPUT для этой операции равно

"df -h | grep /mnt/nand\r\n/dev/mtdblock4  248.5M    130.7M    117.8M  53% /mnt/nand\r\n"

но после операции наступает

"df -h | \n/dev/mtdblock4          248.5M 248.5M    130.7M    117.8M  53% /mnt/nand\r\n "

Пожалуйста, помогите мне

Ответы [ 4 ]

2 голосов
/ 21 июня 2010

Ваше выражение эквивалентно:

output.gsub!(/grep .*$/,'')

, который намного легче читать.

. в регулярном выражении соответствует всем символам, кроме новой строки по умолчанию. Таким образом, в предоставленной строке он соответствует "grep / mnt / nand" и заменит для этого пустую строку. Результатом является предоставленная строка без соответствующей подстроки.

Вот более простой пример:

"hello\n\n\nworld".gsub(/hello.*$/,'') => "\n\n\nworld"

И в указанном вами регулярном выражении, и в приведенном выше примере $ не обязателен. Он используется в качестве привязки для соответствия концу строки, но поскольку шаблон непосредственно перед ним (. *) Соответствует всему, вплоть до новой строки, он является избыточным (но не причиняет вреда).

0 голосов
/ 21 июня 2010

См. «$» Здесь http://www.regular -expressions.info / reference.html

". * $" Означает "взять каждый символ с конца строки ";но синтаксический анализатор будет интерпретировать "\ n" как конец строки, поэтому он останавливается здесь.

0 голосов
/ 21 июня 2010

Здесь есть хороший тестер регулярных выражений / ссылка здесь .Это соответствует слову «grep», затем пробел, затем любое количество символов до следующего переноса строки (\ r или \ n).""сам по себе означает любой символ, а «. *» вместе означает любое их количество, насколько это возможно.«$» означает конец строки.

0 голосов
/ 21 июня 2010

Поскольку gsub возвращает строку, ваша первая строка точно такая же, как

output = output.gsub(/grep .*$/, '')

, который берет строку и удаляет любое вхождение шаблона регулярного выражения

/grep .*$/

т.е. все части строки, которые начинаются с «grep» до конца строки или перевода строки.

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