0

記事の URL を 3g ドメインに変換する必要があります。

たとえば、変換する必要があります

ここにリンクがあります:http://www.mydomain.com/indexありがとう

ここにリンクがあります:<a href='http://3g.mydomain.com$4' target='_self'>http://3g.$3.com$4</a> thanks

他のドメインは変換しないでください。mydomain だけを変換してください。コードは次のとおりです。

$c = "/([^'\"=])?http:\/\/([^ ]+?)(mydomain)\.com([A-Za-z0-9&%\?=\/\-\._#]*)/";
$b=preg_replace($c, "$1<a href='http://3g.$3.com$4' target='_self'>http://3g.$3.com$4</a>",$b);

非常にうまく機能しますが、次のようなテキストの場合:

<a href="http://www.mydomain.com/44" target="_blank" class="blue">a link</a>

次のように間違った結果を返します。

<a href="<a href='http://3g.mydomail.com/44' target='_self'>http://3g.mydomain.com/44</a>" target="_blank" class="blue">a link</a>

しかし、私はの結果が必要です

<a href="http://3g.mydomain.com/44" target="_blank" class="blue">a link</a>

どうすればいいですか?

4

2 に答える 2

1

次のことを行う必要があります。

  1. 既存のハイパーリンクからターゲット属性を取り除く
  2. href 属性のハイパーリンクを書き換える
  3. 他のハイパーリンクを書き換える

    $plain = "http://([^ ]+?)(mydomain)\.com(/?[^'\"\s]*(?=['\"\s]))";

    $plain_replace = "http://3g.$3.com$4";

    $in_href = "href=(['\"])" + プレーン + "(['\"])";

    $in_href_replace = "href='http://3g.$3.com$4' target='self'";

    $strip_target = "target=['\"][^'\"]*['\"]";

    ...

そう:

  1. $strip_target を "" に置き換えます

  2. $in_href を $in_href_replace に置き換えます

  3. $plain を $plain_replace に置き換えます

(正規表現はC# で動作するようにテストされています。PHP の正規表現ルールに合わせて \ エスケープを調整する必要がある場合があります。)

于 2012-08-23T07:15:08.077 に答える
0

?正規表現の最初を取り除きます。これにより、前の文字を省略できます。

または、おそらくあなたの意図により、最初に URL を許可したい場合は、次のように置き換えることができます。

([^'\"=])?

と:

(^|[^'\"=])

...これは、最初の場合、または引用符などの前にない場合はリンクを許可しますが、それ以外の場合は許可しません。

于 2012-08-23T02:58:14.527 に答える