Rubular でわかるように、正規表現<p( style=".+"){0,1}>.+<\/p>
は string と一致します<p>aasdad</p>
。
しかし、私がそうするとき、私は"<p>sdasdasd</p>".scan(/<p( style=".+"){0,1}>.+<\/p>/)
得[[nil]]
ます。一致した文字列が戻り値に含まれないのはなぜですか?
Rubular でわかるように、正規表現<p( style=".+"){0,1}>.+<\/p>
は string と一致します<p>aasdad</p>
。
しかし、私がそうするとき、私は"<p>sdasdasd</p>".scan(/<p( style=".+"){0,1}>.+<\/p>/)
得[[nil]]
ます。一致した文字列が戻り値に含まれないのはなぜですか?
それがscan
仕組みです。のRubyドキュメントからscan
:
パターンにグループが含まれている場合、個々の結果はそれ自体が、グループごとに 1 つのエントリを含む配列になります。
オプションのグループ( style=".+")
が一致しないためnil
、結果には a のみが表示されます。(?:
非キャプチャ グループに使用できます。
"<p>sdasdasd</p>".scan(/<p(?: style=".+"){0,1}>.+<\/p>/)
# => ["<p>sdasdasd</p>"]