2017-06-23 15 views
-2

"_page.php"で終わる文字列のすべてのURLについて、&はそれらを変換してベース名と "_page" 「そう、この文字列を持つ例:preg_replaceを使用して文字列内のURLを変換する

$str = preg_replace('!(http)(s)?:\/\/[a-zA-Z0-9.?&_/]+_page.php!', '$0',$str); 
:私はこれを書いた

<br/>A_page TEXT 
<br/>B_page TEXT 
<br/>C_page TEXT 
<br/>http://www.website.com/folder/D_dont.php TEXT 

<br/>http://www.website.com/folder/A_page.php TEXT 
<br/>http://www.website.com/folder/B_page.php TEXT 
<br/>http://www.website.com/folder/C_page.php TEXT 
<br/>http://www.website.com/folder/D_dont.php TEXT 

は、私は次のようにそれを見てみたいです

は適切な一致を得ますが、一致したURL全体を$ 0に置き換えているため、URLはまったく変更されません。これを行う:

$str = preg_replace('!(http)(s)?:\/\/[a-zA-Z0-9.?&_/]+_page.php!', '$1',$str); 

が私を取得します:

http TEXT 
http TEXT 
http TEXT 
http://www.website.com/folder/D_dont.php TEXT 

だから、私は$ 1から$ 2に切り替えた場合、それは私が解析し、次のように返すことができURLの体を返します考え出し:

$str = preg_replace('!(http)(s)?:\/\/[a-zA-Z0-9.?&_/]+_page.php!', basename('$2','.php'),$str); 

$ 2が空になります。どのように私はpreg_replaceのリンクの本文をキャプチャできますか?

+0

'$ 2'は、それがどのような'(S)であるとして 'S'または空のいずれかである' 'captures.Use? !https?:// [a-zA-Z0-9.?&_/] * /([^ /] * _page)\ .php! 'そして' $ 1'で置き換えます。 –

+0

'basename( '$ 2'、 '.php')'または任意の関数を置き換えるには 'preg_replace_callback()'が必要です。 – AbraCadaver

答えて

1

これらの括弧はすべて必要ありません。このパターンの場合だけ(/.*_page.php)をキャプチャするためにそれらを使用し、それが$1です:

$str = preg_replace('!https?:\/\/[a-zA-Z0-9.?&_/]+(/.*_page.php)!', '$1', $str); 

置き換える使用中のコールバックを関数を使用するには。全体のURLと一致し、この場合には$0または$m[0]であることから、ベース名を取得:

$str = preg_replace_callback('!https?:\/\/[a-zA-Z0-9.?&_/]+_page.php!', 
          function($m) { return basename($m[0]); }, 
          $str); 
+0

ありがとうございます!あなたはそれをうまく説明した。 –

関連する問題