恥ずかしながら長らく悩んでいたのですが、ようやく解決したので備忘録として(;´∀`)
ADs
<table>~</table>の中身を検索でマッチさせる場合を考えてみます。
実践的な使い方だと置換で「tableタグ内部をtbodyで囲う」というような処理になるでしょう。
一見すると以下の構文で簡単にマッチしそうですが、これは上手くいきません。
1 |
<table>(.*?)</table> |
正規表現の「.」は「改行を除く任意の一文字」のため、以下のように改行が含まれるとマッチしません。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<!-- これにはマッチする --> <table><tr><th>あああ</th><td>いいいいいいいい</td></tr></table> <!-- 改行込みだとマッチしない --> <table> <tr> <th>あああ</th> <td>いいいいいいいい</td> </tr> </table> <!-- タブや空白混じりはマッチする --> <table> <tr> <th>あああ</th><td>いいいいいいいい</td> </tr> </table> |
「任意の一文字あるいは改行の繰り返し」と指定すればよいです。
1 |
<table>((.|\r|\n)*?)</table> |
後方参照($1,$2….)を使用する場合は括弧が2重にあることで意図しない結果になるおそれがありますので、後方参照の対象から除外したほうがよいでしょう。
1 |
<table>((?:.|\r|\n)*?)</table> |
※ 「?:」を頭につけることで参照されなくなります。
ADs
コメントはまだありません。