こうすると見出しになる
アスタリスクを二つくっつけてやると、
**小見出しです。
小見出しです。
とまぁこんな感じ。
でも、行頭になければ、なんにも反応しない。
□*変化しない □は半角スペース
*変化しない
このルールを日本語で言うとこうなる。
行頭に半角アスタリスクが来ている行は見出しになる。
これは、HTMLで言うところの、
はてな記法 | HTML |
---|---|
*abc | <h3>abc</h3> |
**abc | <h4>abc</h4> |
と同じ意味なので、HTMLで
<h3>見出しだよ</h3>
と入力しても、
見出しだよ
となるのである。で、これをまたまた正規表現を使ってみた。
正規表現はやっぱりさっぱりわからないが、げろはくほど頑張った。
でもやっぱり撃沈。難しすぎる。というわけで、本文を一括変更ルールはあきらめて、
一行ごとに正規表現であらわすことにする。
そうしたら紆余曲折を経て完成した。
完全に一から正規表現を実装したことはなかったので、うまく動くと何故か嬉しい。
いや、本当に嬉しい。
つまり、
行頭に半角アスタリスクが来ている行
の正規表現は、
/(^\*)([^\n|^\r]*)([\r|\n]*)$/
である。
http://www.glasscom.com/tone/linux/Reference/RegularExp.htm
が大変分かりやすい。
今日は、以下のソースコードで3時間。生産性が悪いなぁ。
この回から、こういう文書整形はクラスにまとめた。
どういうクラスかというと、プロパティにstringが定義されていて、
アクセッサはどちらも可とした。
PHP5で実装しているが、実際に運用する予定なのはPHP 4なので、
コンストラクタをこっそり両方対応するようにしている。
/** *H3対策 */ function formatH3() { /** {{{*/ $array = explode("\n", $this->string); $buffer = ""; for( $iCounter = 0; $iCounter < count($array); $iCounter++ ) { $pattern_H3 = '/(^\*)([^\n|^\r]*)([\r|\n]*)$/'; if ( preg_match($pattern_H3, $array[$iCounter], $xAry) ) { $buffer .= "<h3>".$xAry[2]."</h3>"."\n"; } else { $buffer .= $array[$iCounter]."\n"; } } $this->string = $buffer; } /**}}}*/ /** **H4対策*/ function formatH4() { /** {{{*/ $array = explode("\n", $this->string); $buffer = ""; for( $iCounter = 0; $iCounter < count($array); $iCounter++ ) { $pattern_H4 = '/(^\*\*)([^\n|^\r]*)([\r|\n]*)$/'; if ( preg_match($pattern_H4, $array[$iCounter], $xAry) ) { $buffer .= "<h4>".$xAry[2]."</h4>"."\n"; } else { $buffer .= $array[$iCounter]."\n"; } } $this->string = $buffer; /**}}}*/ }