|
IKKI です。こんばんは。
HmJre.dll のタグ付き正規表現の動作に疑問があります。
sample.html に対して 1.mac を実行すると結果1のようになります。
// 1.mac
replaceall "=(\"[^\"]*\"|[^'\"<> ]*)", "=[\\1]", regular;
// sample.html
<a href="hoge.html"><img src=fuga.jpg></a>
// 期待する結果
<a href=["hoge.html"]><img src=[fuga.jpg]></a>
// 実際の結果1
<a href=[]><img src=[fuga.jpg]></a>
2.mac を実行すると結果2のようになり、期待どおりです。
// 2.mac
replaceall "=(\"[^\"]*\"|[^'\"<> ]+)", "=[\\1]", regular;
// 実際の結果2
<a href=["hoge.html"]><img src=[fuga.jpg]></a>
1.mac と 2.mac の違いは "=(a|b*)" と "=(a|b+)" です。
前者の場合に \1 が a でなく b* の方になってしまうのではと想像します。
この動作は最長一致の原則からして怪しくないでしょうか?
あまり原因を絞り込めていなくて申し訳ありませんが
ご確認のほどよろしくお願いいたします。
(秀丸 v6.05 + HmJre v1.79 + Windows XP)
|
|