正则表达式匹配,但.scan返回nil

时间:2013-07-30 10:24:04

标签: ruby regex

正如你可以see on Rubular一样,正则表达式<p( style=".+"){0,1}>.+<\/p>与字符串<p>aasdad</p>匹配。

但是,当我"<p>sdasdasd</p>".scan(/<p( style=".+"){0,1}>.+<\/p>/)时,我得到[[nil]]。为什么匹配的字符串不包含在返回值中?

2 个答案:

答案 0 :(得分:6)

这就是scan的工作方式。来自Ruby documentation for scan

  

如果模式包含组,则每个结果本身都是一个   每个组包含一个条目的数组。

由于可选组( style=".+")不匹配,因此您只能在结果中获得nil。您可以将(?:用于非捕获组:

"<p>sdasdasd</p>".scan(/<p(?: style=".+"){0,1}>.+<\/p>/)
# => ["<p>sdasdasd</p>"] 

答案 1 :(得分:0)

您也可以尝试使用.match

"<p>sdasdasd</p>".match(/<p( style=".+"){0,1}>.+<\/p>/)
# => <p>sdasdasd</p>