0

私はいつも正規表現に出くわしますが、それらを理解したり使用したりしようとはしません。しかし、現在のプロジェクトでは正規表現を使用する必要があるため、単純な文字列を置き換える正しい正規表現を教えてくれる人が必要です。基本的に、データベースから取得した長いテキストの小さなサブセットを置き換えています。ロングテキストは、次の形式のテキスト アンカーを含む単なる段落です。

<a href="example.com" title="blah3x">Example</a> 

問題は、title 属性の値をどのように置き換えるかです。テキストにはさらに 2 つのアンカー タグが含まれている可能性があるため、それぞれを具体的にターゲティングできるようにしたいと考えています。

編集: これで純粋なPHPを使用したいと思います。js/jquery を使用してこれを行う方法を知っていると思います。

4

3 に答える 3

4

説明

次の正規表現でこれを行うことができます

(<a\b[^>]*?\btitle=(['"]))(.*?)\2

ここに画像の説明を入力

概要

  • (キャプチャ グループ 1 を開始
  • <a\b開いた山かっこを使用aし、単語の区切りが続く
  • [^>]*?閉じていない山かっこ文字を最大ですべて消費します...これにより、正規表現がアンカータグ内にとどまります
  • \btitle=単語区切りを消費しtitle=、区切りは追加のチェックを行うのに役立ちます
  • (['"])キャプチャ グループ 2、開いている一重引用符または二重引用符が使用されていることを確認します
  • )キャプチャ グループ 1 を閉じる
  • (.*?)キャプチャ グループ 3 を開始し、引用符内のすべてのテキストを収集するために非貪欲に消費します
  • \2キャプチャ グループ 2 の文字列を参照します。一重引用符を使用して値を開いた場合は、値を閉じるために一重引用符が必要になります。二重引用符を使用した場合も同様です。

置換コマンドでは、見つかった文字列全体を次のように単純に置き換えています<a to the close quote: グループ キャプチャ 1、その後に目的のテキスト、NewValueその後にグループ キャプチャ 2 からの終了引用符が続きます。

PHP の例

<?php
$sourcestring="<a href="example.com" title="blah3x">Example</a>";
echo preg_replace('/(<a\b[^>]*?\btitle=([\'"]))(.*?)\2/im','\1NewValue\2',$sourcestring);
?>

$sourcestring after replacement:
<a href="example.com" title="NewValue">Example</a>

免責事項

HTML パーサーによるテキストの解析は望ましい解決策ではないため、正規表現を使用した HTML の解析に関する通常のソープ ボックスの免責事項はスキップします。

于 2013-06-01T05:08:50.063 に答える
4
$doc = new DOMDocument();
$doc->loadHTML('<a href="example.com" title="blah3x">Example</a>');
$anchors = $doc->getElementsByTagName('a');
foreach ($anchors as $anchor)
{
    $anchor->setAttribute('target', '__blank');
}
$html = $doc->saveHTML();

echo $html;

実際に見る

于 2013-06-01T03:24:27.380 に答える