红宝石中的模式匹配

时间:2010-06-21 13:56:47

标签: ruby

cud任何身体告诉我这个表达是如何运作的

output = "#{output.gsub(/grep .*$/,'')}"
在ouptput的操作值

之前

"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 "

plzz帮帮我

4 个答案:

答案 0 :(得分:2)

你的表达相当于:

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

更容易阅读。

。在正则表达式中默认匹配除换行符之外的所有字符。因此,在提供的字符串中,它匹配“grep / mnt / nand”,并将替换空字符串。结果是提供的字符串,没有匹配的子字符串。

这是一个更简单的例子:

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

在你提供的正则表达式和上面的例子中,$都没有必要。它被用作匹配行尾的锚点,但由于它前面的模式(。*)匹配到换行符之前的所有内容,因此它是多余的(但不会造成伤害)。

答案 1 :(得分:0)

由于gsub返回一个字符串,因此第一行与

完全相同
output = output.gsub(/grep .*$/, '')

获取字符串并删除正则表达式的任何出现

/grep .*$/

即。字符串的所有部分以'grep'开头,直到字符串结尾或换行符。

答案 2 :(得分:0)

有一个很好的正则表达式测试/参考here。这个匹配单词“grep”,然后是空格,然后匹配任意数量的字符,直到下一个换行符(\ r或\ n)。 “”本身意味着任何字符,而“。*”在一起意味着任意数量的字符。 “$”表示一行的结尾。

答案 3 :(得分:0)

对于'$',请参阅此处http://www.regular-expressions.info/reference.html

“。* $”表示“从字符串 end 中取出每个字符”;但是解析器会将“\ n”解释为一行的结尾,所以它在此处停止。

相关问题