当我在字符串p*
上使用正则表达式blackpink
时,即使p在字符串中,它也会将空字符串作为匹配返回。
当我在字符串p*
上使用相同的正则表达式pinkpink
时,它匹配并返回p
,表示它仅在字符串的开头匹配,即使我没有指定任何内容那种。
特殊行为是,当我在字符串p+
和pink
上使用blackpink
时,在这两种情况下都返回p
,表示它不关心匹配在字符串的开头或里面。
任何人都能解释一下吗?
答案 0 :(得分:1)
我认为您正在使用re.match
来查找模式的匹配项。正如您从文档中看到的那样:
如果字符串开头的零个或多个字符与。匹配 正则表达式模式,返回相应的
MatchObject
实例强调我的
由于p*
表示0个或多个字符,贪婪,字符串blackpink
的起点只是一个空字符串,''
满足您的要求图案。实际上,模式p*
将为任意两个字符之间的每个空(0长度)字符串返回成功匹配。
答案 1 :(得分:1)
这里有两件重要的事情要理解:
.field
= label_tag "tour Categories"
%br/
= select_tag "tourcategory", options_from_collection_for_select(Tourcategory.all, 'id', 'title', @tour.tourcategories.map{ |j| j.id })
= f.submit
匹配零或更多,而p*
匹配一个或更多。p+
。所以,因此,
p
上的p*
匹配字符串最开头的零p,即blackpink
。''
上的p*
与第一个pinkpink
(不是第二个)匹配。p
上的p+
与第六个字母blackpink
匹配,因为空字符串因p
而不再匹配。+
上的p+
与第一个pinkpink
匹配。