开发者

pattern matching in ruby

cud any body tell me how this expression works

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

before that opearation value of ouptput is

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

but after opeartion it c开发者_开发知识库omes

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

plzz help me


Your expression is equivalent to:

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

which is much easier to read.

The . in the regular expression matches all characters except newline by default. So, in the string provided, it matches "grep /mnt/nand", and will substitute a blank string for that. The result is the provided string, without the matched substring.

Here is a simpler example:

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

In both your provided regex, and the example above, the $ is not necessary. It is used as an anchor to match the end of a line, but since the pattern immediately before it (.*) matches everything up to a newline, it is redundant (but does not cause harm).


Since gsub returns a string, your first line is exactly the same as

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

which takes the string and removes any occurance of the regexp pattern

/grep .*$/

i.e. all parts of the string that start with 'grep ' until the end of the string or a line break.


There's a good regexp tester/reference here. This one matches the word "grep", then a space, then any number of characters until the next line-break (\r or \n). "." by itself means any character, and ".*" together means any number of them, as many as possible. "$" means the end of a line.


For the '$', see here http://www.regular-expressions.info/reference.html

".*$" means "take every character from the end of the string" ; but the parser will interpret the "\n" as the end of a line, so it stops here.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜