2009-07-31 14 views
0

alt属性に含まれていない文字列を捕捉するために、eregi_replaceの正規表現が必要になるのではないかと思います。regexがPHPのaltテキストのパターンを見つけられないeregi_replace

"ジョン・ドウが上...生まれた" が、例えば任意のタグにするときJohn Doeの検索/置換ません:

<img src="/jd.jpg" alt="John Doe at the beach" /> 
+1

「eregi_replace」にする必要がありますか? 'ereg [i] _'関数は、はるかに強力な' preg_'関数のために推奨されていません。 'preg_replace'では可能かもしれません。 –

+0

確かに...私は仕事を終わらせることができるどんなツールでも行くでしょう。 :-) – Ian

答えて

1

のようなパターンに一致していないながら、正規表現は

<b> 
<<b>> 
<<<b>>> 

のようなパターンに一致することはできませんタグ内では、私はこれを行うでしょう:

$str = preg_replace('/John Doe(?![^<>]*+>)/i', $new_name, $str); 

(?![^<>]*+>)はnegatです私は先読みします。この点より先に山括弧がある場合、最初の括弧は閉じ括弧ではありません。属性値に山括弧を含めることができますが、私の経験ではほとんど行いません。

正規表現は基本的にHTMLと互換性がありません。 lookaroundspossessive quantifiersのようなpreg_スイートの高度な機能を使用しても、属性値の山括弧がない場合は、のように単純化することにしばしば頼る必要があります。私ははるかに限定されたereg_機能でこの仕事を試みることさえできません。

+0

これはトリックを行ったようです!ありがとう。 – Ian

+0

ゼロ幅先読みの使い分け。 –

0

あなた」にそれが見つけ、ジョン・ドウを交換する必要があります正規表現の限界に達しました。これにはカスタムパーサが必要です。 タグは入れ子にすることができ、私はそれがない場合は、「ジョン・ドウ」を交換したい場合

<b>> 
<<b> 
<<b>>> 

など

+0

しかし、要素内のテキストを検索している場合は、ネストされません。要素が<...>の範囲にある – Ian

関連する問題