HTML文書から特定のタグ以外を変換しようとしているのですが、
[^]とiがヘンな風に作用しているのか上手くいきません。^^;
わかる方いましたら教えてください。

$foo = '<a href="bar">hoehoe</a><b>auau</b>';
$foo =~ s/<(\/[^a] *.*?)>/##$1##/isg;

■希望
<a href="bar">hoehoe</a>##b##auau##/b##
■現実
<a href="bar">hoehoe##/a####b##auau##/b##


以下のようにやると効率的ではありませんがうまくいきます。

$foo =~ s/[<>]/##/gs;
$foo =~ s/##(\/*a *[^#]*)##/<$1>/igs;

A 回答 (3件)

> 「教えてあげないと」の意味がよくつかめません。



[^(A|FONT|B|BR)]

の ^ に期待していることは、

<\/?([a-zA-Z]+).*>

の \1 に相当するところのうちの A|FONT|B|BR 以外ってこと
ですもんね。

正規表現で言うと、単純に A|FONT|B|BR 以外って言っちゃうと
長さ0の文字列や空白も、それに相当しますから。
    • good
    • 0
この回答へのお礼

>長さ0の文字列や空白も、それに相当しますから。
そうですよね。自分でもあとから気付きました。ハズかしいです。^^;

最終的にはこんな感じになりました。

$oktag = 'A|B|FONT|BR';
$hoe =~ s/\<(?!\/?($oktag)( [^>]*)?>)([^>]*)>/&lt;$3&gt;/oisg;

実際は value="<br>" とかコメントタグが入ってくると無効になって
しまいますがとりあえずはこれでいいかなと。

ありがとうございました。

お礼日時:2001/04/06 19:46

> ところで「()」のグループ化で「このグループ以外」って指定は


> できないんでしたっけ?
>
> [^(A|FONT|B|BR)]
> みたいな…。

無い。

「このグループ以外」と言っても、あなたは暗黙に英数字からなる単語の
うち、と考えているわけですから、それも教えてあげないと。

でも、私は、それを一気に書ける正規表現を知りません。
    • good
    • 0
この回答へのお礼

やはりそうですか。ありがとうございました。
「教えてあげないと」の意味がよくつかめません。
もしよければ補足などお願いします。

お礼日時:2001/04/05 18:36

$foo =~ s/<(\/?[^\/a][^>]*)>/##$1##/ig;



かな?
    • good
    • 0
この回答へのお礼

ありがとうございます。:-)
その後いろいろ試してこちらでも同じものに行き着きました。
ところで「()」のグループ化で「このグループ以外」って指定は
できないんでしたっけ?

[^(A|FONT|B|BR)]
みたいな…。

お礼日時:2001/04/05 11:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報