[PHP-users 27604] Re: 正規表現についてご教授の程、よろしくお願いします。
okuyama@workgroup
okuyama @ workgroup.jp
2005年 11月 24日 (木) 22:44:43 JST
おく@Workgroupです。
<?php
class regexReplace {
var $str;
var $regex;
var $replace;
function regexReplace($str = null) {
$this->str = $str;
}
function setString($str) {
$this->str = $str;
}
function addPatern($strings, $replaceUri) {
$this->regex[] = sprintf(
"/(%s)(?=(?:(?!<\s*?\/\s*?a\s*?>).)*(?:<\s*?a(?:>|\s[^>]+>)|$))/is"
, $strings);
$this->replace[] = sprintf(
"<a href=\"%s\">$1</a>"
, $replaceUri);
}
function get() {
return preg_replace($this->regex, $this->replace,
$this->str);
}
}
$str = 'テスト<a href="http://www.yahoo.co.jp">yahoo</a>
yahooです。< a
href = \"http://www.yahoo.co.jp/\" > yahoo
< / a >かも
。yahoo です <a href=\"http://www.excite.co.jp\">
excite
<
/
a
>かな? test excite です';
$repl = new regexReplace($str);
$repl->addPatern("yahoo", "http://www.yahoo.co.jp/");
$repl->addPatern("excite", "http://www.excite.co.jp/");
$out = $repl->get();
echo "$out\n";
?>
ミワさまのを少しいじると、かなり意地悪なHTMLでもOKですね。
置き換え部分をクラス化しておくと、もっと汎用的な部品になります。
. ・ . + : ゜. ‥ ゜. .
‥ ゜. . . ・. ・ . +
/ + ゜. ・ . + :
★ from: Atsuji Okuyama
彡彡ミ
)∂∂b mail: okuyama @ workgroup.jp
( ー 人__ tel: 050-3599-1875
 ̄/)/ | tel: 050-7567-2016
|` ̄ "\ au : 090-3545-9553
> -----Original Message-----
> From: php-users-bounces @ php.gr.jp
> [mailto:php-users-bounces @ php.gr.jp] On Behalf Of Eiji Miwa
> Sent: Thursday, November 24, 2005 9:13 PM
> To: PHP-users ML
> Subject: [PHP-users 27602] Re: 正規表現についてご教授の程、よろしくお願い
します。
>
>
> ミワです。
>
> On 2005年 11月 24日 , at 10:34, 水沼寛喜 wrote:
> >
> > ●想定をしている動作環境
> >
> > ・送信文字列
> > テスト<a href="http://www.yahoo.co.jp">yahoo</a>
> > yahooです。
> >
> > ・置換処理後の想定している結果
> > テスト<a href="http://www.yahoo.co.jp">yahoo</a>
> > <a href="http://hoge.hoge">yahoo</a>です。
> >
> > 1行目の「yahoo」というURLとURLリンクに記述
> > されている文字には
> > 反応しないで、2行目の「yahoo」という文字に正規表現によ
> > る置換処理
> > を行いたい。
>
> こんなのでどうでしょう?
> ---
> $string = 'テスト<a href="http://www.yahoo.co.jp">yahoo!</
> a><br>テストyahooです。';
> $keyword = 'yahoo';
> $pattern =
> sprintf('/(%s)(?=(?:(?!<\/a>).)*(?:<a(?:>|\s[^>]+>)|$))/
> is',$keyword);
> $replacement = '<a href="http://hoge.hoge">$1</a>';
> var_dump(preg_replace($pattern,$replacement,$string));
> ---
> アンカーの閉じタグで判断してます。
>
> --
> miwa at offside.ne.jp
>
>
>
> _______________________________________________
> 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 メーリングリストの案内