Kobarin's Development Blog

C#やASP.NETなどについての記録です。

Yahoo Pipes Regex 考察

Regexモジュールについてわかった事。

「\s」削除で、他の要素も消えてしまう現象について

例えば、以下のようなtableがあったとします。

<table class="summer">
  <tr><th><p>名前</p></th><td><p>山田</p></td></tr>
<table>

ここで、まずスペースを一掃するために、Regexモジュールで「\s→null」指定すると、以下のような結果となってしまいました。

<p>名前</p><p>山田</p>
原因

なぜか。スペースを全て削除してしまったため、

<table class="summer">→<tableclass"summer">

となってしまい、この場合Yahoo Pipesではtableタグを無効と見なしてしまうらしいのです。
<table>が無効ならその中の<tr>や<th>等も全てあり得ない存在なので、table関連タグは全て非表示となります。

そして問題なのは、こうしてプレビュー上で見えなくなったタグは、Regexによる置き換えが非常に困難になる点です。
「.*」で指定すればOKですが、「[^0-9]*」等のNOT規則が効かなくなります。

対策

要はタグ内のスペースを残せば良いので、Regexで以下のように指定して以下のようにします。

pattern output
\s*< $1<
>\s* >$1

考え方は、「タグの外に連続するスペースのみ削除」です。
ただしこれだと以下のような、タグ外の文章中に存在するスペースは削除されませんので、別の対策が必要ですね。