Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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_Regex - Fatal编程技术网

Ruby中正则表达式的贪婪和非贪婪方法有什么区别?

Ruby中正则表达式的贪婪和非贪婪方法有什么区别?,ruby,regex,Ruby,Regex,有人能帮我理解正则表达式的两种方法之间的区别吗?举一些合适的例子 贪心的 非贪婪 谢谢 *-(0或更多)贪婪匹配 +-(1个或多个)贪婪匹配 *?-(0或更多)非贪婪匹配 +?-(1个或多个)非贪婪匹配 在贪婪方法中,正则表达式模式倾向于在源字符串中使用最多字符 textstr = "bcabdcab" textstr.gsub!(/(.*)ab/, "xxx") # this will match whole `bcabdcab` and return `xxx` 这里的*是贪婪的量

有人能帮我理解正则表达式的两种方法之间的区别吗?举一些合适的例子

  • 贪心的
  • 非贪婪
谢谢

  • *
    -(0或更多)贪婪匹配
  • +
    -(1个或多个)贪婪匹配
  • *?
    -(0或更多)非贪婪匹配
  • +?
    -(1个或多个)非贪婪匹配

在贪婪方法中,正则表达式模式倾向于在源字符串中使用最多字符

textstr = "bcabdcab"
textstr.gsub!(/(.*)ab/, "xxx")  
# this will match whole `bcabdcab` and return `xxx`
这里的
*
是贪婪的量词。在非贪婪方法中,正则表达式引擎在满足匹配条件时返回。要使量词成为非贪婪的附加

textstr = "bcabdcab"
textstr.gsub!(/(.*?)ab/, "xxx")  
# this will match only `bcab` part and return `xxxdcab`
gsub
返回str(第一个参数)的副本,其中所有出现的模式都替换为第二个参数

贪婪是指正则表达式引擎尝试匹配特定字符集的次数。说明正则表达式“贪婪性”的方法是使用特殊字符
*
+
{}

考虑

str = "asdfasdfbbbb"
r1 = /b/
r2 = /(asdf)*/
r3 = /b{3}/
r4 = /.*/
将这些正则表达式与str匹配将导致:

r1匹配“asdfasdfbbbb”(非贪婪,仅尝试匹配b一次)
r2匹配“asdfasdfbbbb”(贪婪,尽可能多次尝试匹配asdf)
r3匹配“asdfasdfbbbb”(非贪婪,精确匹配b 3次)
r4匹配“asdfasdfbbbb”(超级贪婪,尽可能多地匹配几乎任何字符)


由于正则表达式是表示特定文本模式的方法,它不像贪婪,而是一个方法问题。有时需要匹配三次foo(
/(foo){3}/
)或无限次bar(
/(bar)*/
).

所有正则表达式文档都涵盖了这一点。是否存在任何特定情况-何时选择
贪婪
非贪婪
方法?有关ruby正则表达式的更多信息,请查看
gsub
函数是否要获取所替换模式的所有出现,第二个函数应返回“xxxxxx”。