次へ: 7 行の整形出力 上へ: AWK による HTML ファイルの整形 その 2 前へ: 5 一覧部分の取得 (PDF ファイル: awkwww2.pdf)


6 行の分割

ここでは、5 節で説明した (1) の行の分割の部分を考えます。

文字列をある文字列を切れ目として分割するには、split() が使えます。

split(s, h, r): 文字列 $s$ を、正規表現 $r$ を区切りとして区切って 配列 $h$ に保存し、その個数を返す
これで、例えば
  <li>(あ)<br><li>(い)<br><li>(う)<br><br>
という文字列 str を
  N=split(str,h,/<br>/)
とすると、$N$ と配列 $h$ の内容は以下のようになります:
  N=5, h[1]="(あ)", h[2]="(い)", h[3]="(う)", h[4]="", h[5]=""
最後の 2 つにゴミが残っていますが、それは文字列の最後に <br> が ついていることによります。 よって、それを削除してから split() にかけるといいでしょう。 同様に、
  <li>(あ)<br><li>(い)<br><li>(う)<br></ul>
という文字列を同じように split() にかけると
  N=4, h[1]="(あ)", h[2]="(い)", h[3]="(う)", h[4]="</ul>"
のようになりますので、この場合も最後の <br></ul> を 削除してから split() にかけます。よって、
  sub(/<br>(<br>|<\/ul>)? *$/,"",str)
  N=split(str,h,/<br>/)
のようにすればいいでしょう。この最初の sub() に与えている正規表現は、
(<br>|<\/ul>) = <br> または </ul>
(<br>|<\/ul>)? = (<br> または </ul>) の 0 回かまたは 1 回
<br>(<br>|<\/ul>)? = <br><br><br><br></ul>
<br>(<br>|<\/ul>)? *$ = そのいずれかにスペースが 0 個以上ついて行末
を意味しています。


次へ: 7 行の整形出力 上へ: AWK による HTML ファイルの整形 その 2 前へ: 5 一覧部分の取得
竹野茂治@新潟工科大学
2006年9月5日