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”。