2017-01-28 6 views
1

これは私を絶対に狂わせてしまいます。PHP Regex未知の文字列の前後に置き換えます。

私は値が「UDP://」の後にこのような文字列を、持っている場合は異なります。

LONDON Remote server cluster 88: taken 
udp://8379f690ba57e0fdf8f944324a4453de67780 

BRUSSELS: Hosted MPLS cluster 
udp://5b0e9bc72b989c87a9a70da7865dbb5b4aa9c086 

PARIS: Hosted atrium access 
udp://39415215319c9brt6b9c7d10238c19cc82e7f88b 

PRAGUE: Main Office acces 
udp://e721f751ab0936706192cf15b4632889b38f131a 

どのように私はそれがそうのように見えるようにPHPで正規表現を使用することができます。

LONDON Remote server cluster 88: taken 
http://www.8379f690ba57e0fdf8f944324a4453de67780/tsa.a3m 

BRUSSELS: Hosted MPLS cluster 
http://www.5b0e9bc72b989c87a9a70da7865dbb5b4aa9c086/tsa.a3m 

PARIS: Hosted atrium access 
http://www.39415215319c9brt6b9c7d10238c19cc82e7f88b/tsa.a3m 

PRAGUE: Main Office acces 
http://www.e721f751ab0936706192cf15b4632889b38f131a/tsa.a3m 
を後に長い英数字の値を求め

(?<=udp:\/\/)(.*)(?=) 

「UDP://」が、時間

は、これまでのところ私がこの正規表現を得ることができました私はこれを使用して値の前に新しい値「http://」を置き換え、その後に「/tsa.a3m」を置き換えますか?心配することは、これらの値の間の線上の文字列はいつでも変化することです。私はpreg_replaceを使用しなければならないが、貴重な英数字の値を見つけて「udp://」を破棄して 'http://'で置き換えて '/ tsa.a3m」

私はこのような何かをしようとしたが、それは動作しませんし、それがいかなる特定のエラー与えるものではありません:

$value = '/(?<=udp:\/\/)(.*)(?=)/'; 
$string[]='http://www'; 
$string[]= $value; 
$string[]='/tsa.a3m'; 
$string = join('',$string); 
$replace = 'udp://'.$variable; 
$data = preg_replace("/($replace, $string, ($_POST['text'])); 

を、私は任意の助けとても感謝されます!

答えて

1

Lookbehindを使用しないでください。これは一致に含まれないため置き換えられません。

$data = preg_replace('#udp://(\S*)#', 'http://www.$1/tsa.a3m', $_POST['text']); 

DEMO

+0

それは/tsa.a3mが新しい行に追加されていることを除いて働いて、本当にありがとうございましたか! – manners

+0

なぜそれが起こるのか分かりません。 URLの後に '
'のようなHTMLマークアップがある可能性はありますか?通常の文字列で正しく動作することを示すデモを追加しました。 – Barmar

+0

Barmar、デモのおかげで、私は問題がPHPがHTMLフォームからの入力テキストをどのように処理しているかに関係していると思います。私はここで詳細な質問を書いてきました[http://stackoverflow.com/questions/41915684/html-form-post-data-using-php-for-regex-replace-causes-weird-eol-entries-m ] – manners

関連する問題