Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ruby中的模式匹配_Ruby - Fatal编程技术网

ruby中的模式匹配

ruby中的模式匹配,ruby,Ruby,有人能告诉我这个表达是怎么运作的吗 output = "#{output.gsub(/grep .*$/,'')}" 在此之前,OUTPUT的操作值为 "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

有人能告诉我这个表达是怎么运作的吗

output = "#{output.gsub(/grep .*$/,'')}"
在此之前,OUTPUT的操作值为

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

您的表达式相当于:

output.gsub!(/grep .*$/,'')
这更容易阅读

这个。在正则表达式中,默认情况下匹配除换行符以外的所有字符。因此,在提供的字符串中,它与“grep/mnt/nand”匹配,并将用一个空白字符串替换它。结果是提供的字符串,没有匹配的子字符串

下面是一个更简单的例子:

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

在您提供的正则表达式和上面的示例中,$都不是必需的。它被用作一个锚来匹配一行的结尾,但由于紧靠它前面的模式(.*)匹配到新行的所有内容,因此它是多余的(但不会造成损害)。

由于gsub返回一个字符串,您的第一行与

output = output.gsub(/grep .*$/, '')
它接受字符串并删除任何出现的regexp模式

/grep .*$/

i、 e.字符串中以“grep”开头直到字符串结尾或换行符的所有部分。

有一个好的regexp测试仪/参考。这一个匹配单词“grep”,然后是空格,然后是任意数量的字符,直到下一个换行符(\r或\n)。“.”本身指任何字符,“*”一起指尽可能多的字符。“$”表示行尾。

有关“$”的信息,请参见此处


“*$”表示“从字符串末尾提取每个字符”;但是解析器会将“\n”解释为一行的结尾,所以它会停在这里

使用
`
这样我们就可以区分文本和代码你想要达到的结果是什么?jamie我没有任何期望,但我想知道这个表达式的工作原理我知道grep是如何被“”取代的字符串,但它是如何工作的。*$我不明白,谢谢jason,但请用其他示例解释一下,还有一件事jason为什么要使用*$plus/n也在结尾line@amit:我已经更新了答案,添加了另一个示例和对$的解释(以及为什么这里不需要它)。把。*放在一起,把$作为一个单独的符号。还有一件事是,这些\n\n\\n在o/p中,我认为它将作为World进行o/p。换行符“\n\n\n”将保留,因为它们不与正则表达式匹配。(*)最多匹配但不包括换行符。请注意,在原始字符串中,保留了\n。所有达到或包括\r的内容都被剥离(\r不被视为换行符),因为ULM换行符表示此/r或/n这是换行符??nd为什么使用*$换行符的确切定义取决于实现和平台,但\n肯定是换行符。正则表达式遇到错误时通常会停止\n,除非您明确告诉它们其他错误..*表示“零次或多次匹配任何字符”。因此,匹配“grep”之后的任何内容。$在RegExp中,有一个特殊字符表示行的结尾。glenn首先感谢cud u plzz expin。*我无法取消暂停,但plzz i waiting句点本身表示任何字符,后面的星号表示尽可能多的字符。所以,把“*”放在一起,在“grep”之后,就可以得到行中其余部分的所有内容。