phpの正規表現で、


http://are.kore.sore/dore//hate/na//
http://are.kore.sore/dore//hate/na//dayo.jpg

というような「//」が不正に入ったテキストから、
http://以外の // を / にして、

http://are.kore.sore/dore/hate/na/
http://are.kore.sore/dore/hate/na/dayo.jpg

というように、正しいURLにしたいと思っていますが、
初めの//も検出されて困っています。

アドバイス頂けると助かります。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2007/08/07 21:59:05
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:STRing No.1

回答回数351ベストアンサー獲得回数36

ポイント27pt
[^:]//

このようにして「:以外の文字の後に//」と云う条件で置換してやるのがスマートかと。

正規表現メモ

正規表現メモ


なお、 // を / にしてから :/ を :// にするというのは多分タブー。

id:onigirin

どうもありがとうございます。

無事解決しました!

メモとても参考になりました。

2007/08/07 21:58:08
id:subweb No.2

回答回数21ベストアンサー獲得回数0

ポイント27pt

$str = 'http://are.kore.sore/dore//hate/na//dayo.jpg';

$str2 = ereg_replace("[^://]//", "/", $str);

print $str2;

print "\n";


こんな感じではないでしょうか。

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/php_k09.htm

こういったところを参考に、 :// 以外で、 // を置換

という考えで書きました。

id:onigirin

どうもありがとうございます。

無事解決しました!

URLも大変参考になりました。

2007/08/07 21:58:36
id:Yota No.3

回答回数453ベストアンサー獲得回数28

ポイント26pt

$str = 'http://are.kore.sore/dore//hate/na//dayo.jpg' ;

$pattern = '/([^:\/]{1})\/+/';

$replacement = '$1/';

preg_match_all($pattern,$str,$matches) ;

for($i = 0 ;$i < count($matches[0]) ;$i++ ) {

$matches_r[] = preg_replace($pattern,$replacement,$matches[0][$i]) ;

}

echo str_replace($matches[0],$matches_r,$str) ;

id:onigirin

どうもありがとうございます。

無事解決しました!

パターンの例は勉強になり助かりました。

2007/08/07 21:58:55

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません