[PHP-users 27456] Re: 正規表現について

nomoto shin-1 @ ca2.so-net.ne.jp
2005年 11月 10日 (木) 18:23:42 JST


  nomotoです。

>まつやま様ののソースコードで開発していこうと現在考えておりますが、
>以下の様なテスト文字を作成して試したところ、英数字と記号を使用した場合、
>うまく変換されないのですがどの様にしたらよろしいでしょうか?

開始終了で囲まれた文字列の抜き出し(パース)は単純な正規表現では
フォーローしきれない問題が出てきます。

(\w*)は([a-zA-Z0-9_]*)と同じなので[[abcdefgh]]ではマッチしますが
日本語や空白や記号が入ったらマッチしません。

(.*)はどんな文字であっても最大長でマッチするので、日本語が
入っていてもOKですが [[テスト]]で[[す]] などにマッチさせた場合
に、もっとも長くなる テスト]]で[[す という文字列にマッチします。

(.+?)と?をつけると一番短くマッチするので、 [[テスト]]で[[す]] 
という文字は テスト の部分にマッチするので一番目的に近いように
思えますが、この場合でも、 [[テスト[[なん]]です]] とタグが
入れ子になっていると テスト[[なん の部分でマッチしてしまうので
うまく行かないでしょうね。

パース処理については、先頭からループ処理を駆使して開始タグが
何回出てきたか、終了タグが何回でてきたか、現在入れ子が何階層目
なのか、などを順番に処理しないと正確には処理できません。

大変ですが良いサンプルがあるといいですね。頑張ってください。




PHP-users メーリングリストの案内