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

okuyama@workgroup okuyama @ workgroup.jp
2005年 11月 10日 (木) 17:26:33 JST


おく@Workgroup です

perl互換でよければ、以下のように実現可能です。

<?php

$str = '&lt;&lt;あいうえお&gt;&gt;[[[あいうえお]]][[あいうえお]][http://www.
yahoo.co.jp:あいうえお]てすと';


$repl = preg_replace(
	array(
		"/(.*[^\[]*)\[(http:.+?):(.+[^\[]?)\]([^\[]*.*)/",
		"/(.*)\[\[\[(.+?)\]\]\](.*)/",
		"/(.*)&lt;&lt;(.+?)&gt;&gt;(.*)/",
		"/(.*[^\[]*)\[\[([^\[]+[^\]]?)\]\]([^\]]*.*)/",

	),
	array(
		"\\1<a href=\"\\2\" target=\"_blank\">\\3</a>\\4",
		"\\1<u>\\2</u>\\3",
		"\\1<i>\\2</i>\\3",

		"\\1<font size=\"4\">\\2</font>\\3"
	)
, $str);

echo "$str\n\n";
echo "$repl\n";

?>

結果:
&lt;&lt;あいうえお&gt;&gt;[[[あいうえお]]][[あいうえ
お]][http://www.yahoo.co.jp:あいうえお]てすと

<i>あいうえお</i><u>あいうえお</u><font size="4">あいうえお</font><a
href="http://www.yahoo.co.jp" target="_blank">あいうえお</a>てすと


> -----Original Message-----
> From: php-users-bounces @ php.gr.jp
> [mailto:php-users-bounces @ php.gr.jp] On Behalf Of 水沼寛喜
> Sent: Thursday, November 10, 2005 4:35 PM
> To: php-users @ php.gr.jp
> Subject: [PHP-users 27445] 正規表現について
>
> お世話になっております。水沼と言います。
>
> 先日、正規表現について質問致しましたが、
> なかなか想定している様に動作しないため、
> 再度ご教授の程、よろしくお願いいたします。
>
>
> やりたいことは、掲示板のテキストエリアに
> 独自タグを入力して、投稿した場合に
> HTMLタグに変換してデータを登録したいのです。
>
> 独自タグのフォーマットは現在以下の様な形を
> 想定しています。
>
> ・ボールド(&lt;3つと&gt;3つに囲まれている文字のみ変換)
> &lt;&lt;&lt;あいうえお&gt;&gt;&gt;
>> <b>あいうえお</b>
>
> ・イタリック(&lt;2つと&gt;2つに囲まれている文字のみ変換)
> &lt;&lt;あいうえお&gt;&gt;
>> <i>あいうえお</i>
>
> ・アンダーライン([3つと]3つに囲まれている文字のみ変換)
> [[[あいうえお]]]
>> <u>あいうえお</u>
>
> ・文字サイズ変更([2つと]2つに囲まれている文字のみ変換)
> [[あいうえお]]
>> <font size="4">あいうえお</font>
>
> ・URLアドレス
> [http://www.yahoo.co.jp:あいうえお]
>> <a href="http://www.yahoo.co.jp" target="_blank">あいうえお</a>
>
> です。
>
> HTMLの文字コードは、utf-8を使用しております。
> 現在、自分で作成した正規表現の方法は以下の通りです。
>
> <?
>
> function($str){
>
>   //ボールド
>   $str = mb_ereg_replace("((&lt;){3})((^[\w])*)((&gt;){3})",
> "<b>\\3</b>", $str);
>
>   //イタリック
>   $str = mb_ereg_replace("((&lt;){2})((^[\w])*)((&gt;){2})",
> "<b>\\3</b>", $str);
>
>   //アンダーライン
>   $str = mb_ereg_replace("((\[){3})((^[\w])*)((\]){3})",
> "<u>\\3</u>", $str);
>
>   //文字サイズ
>   $str = mb_ereg_replace("((\[){2})((^[\w])*)((\]){2})",
> "<font size='4'>\\3</font>", $str);
>
>   //URLアドレス
> ?>
>
> よろしくお願い致します。
>
>
> _______________________________________________
> PHP-users mailing list  PHP-users @ php.gr.jp
> http://ns1.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://www.php.gr.jp/php/novice.php3
>
>



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