正如您在 Rubular 上看到的,正则表达式<p( style=".+"){0,1}>.+<\/p>
匹配字符串<p>aasdad</p>
。
但是,当我这样做时,"<p>sdasdasd</p>".scan(/<p( style=".+"){0,1}>.+<\/p>/)
我得到[[nil]]
. 为什么匹配的字符串不包含在返回值中?
正如您在 Rubular 上看到的,正则表达式<p( style=".+"){0,1}>.+<\/p>
匹配字符串<p>aasdad</p>
。
但是,当我这样做时,"<p>sdasdasd</p>".scan(/<p( style=".+"){0,1}>.+<\/p>/)
我得到[[nil]]
. 为什么匹配的字符串不包含在返回值中?
这就是工作方式scan
。来自 Ruby文档scan
:
如果模式包含组,则每个单独的结果本身就是一个数组,每个组包含一个条目。
由于可选组( style=".+")
不匹配,因此您只能nil
在结果中得到 a 。您可以(?:
用于非捕获组:
"<p>sdasdasd</p>".scan(/<p(?: style=".+"){0,1}>.+<\/p>/)
# => ["<p>sdasdasd</p>"]
您也可以尝试使用 .match
"<p>sdasdasd</p>".match(/<p( style=".+"){0,1}>.+<\/p>/)
# => <p>sdasdasd</p>