こうすると見出しになる

アスタリスクを二つくっつけてやると、

**小見出しです。

小見出しです。

とまぁこんな感じ。

でも、行頭になければ、なんにも反応しない。

□*変化しない □は半角スペース

*変化しない

このルールを日本語で言うとこうなる。

行頭に半角アスタリスクが来ている行は見出しになる。

行頭に半角アスタリスクが二つ連なっている行は小見出しになる

これは、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;			
			/**}}}*/
		}