perlについて。


置換やマッチング等で、正規表現を使わないということは出来るのでしょうか。出来たら方法を教えてください。


<例>
文字列A→
http://www.yahoo.co.jp

文字列B→
http://www.google.co.jp

文字列Aを文字列Bに置換する。その際に文字列Aを「http://www\.yahoo\.co\.jp」などとエスケープしたりせず、
そのまま使いたい。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2011/10/03 19:56:14
  • 終了:2011/10/08 12:17:38

ベストアンサー

id:cubick No.1

cubick回答回数123ベストアンサー獲得回数352011/10/03 20:16:59

ポイント42pt

テキスト修飾子の「\Q」および「\E」を使うのはいかがでしょうか。

「\Q」は「\E」までの文字列で、正規表現に使われる特殊文字を文字列とみなすオプションです。

$str =~ s/\Qwww.yahoo.co.jp\E/www.google.co.jp/;

http://rfs.jp/sb/perl/02/09.html

その他の回答(2件)

id:cubick No.1

cubick回答回数123ベストアンサー獲得回数352011/10/03 20:16:59ここでベストアンサー

ポイント42pt

テキスト修飾子の「\Q」および「\E」を使うのはいかがでしょうか。

「\Q」は「\E」までの文字列で、正規表現に使われる特殊文字を文字列とみなすオプションです。

$str =~ s/\Qwww.yahoo.co.jp\E/www.google.co.jp/;

http://rfs.jp/sb/perl/02/09.html

id:km1981 No.2

km1981回答回数429ベストアンサー獲得回数492011/10/03 20:37:07

ポイント25pt

区切り文字にパス名として使わないアスタリスクを使って

式の評価をしないといいと思います


サンプル・スクリプトです

$str = 'http://www.yahoo.co.jp/index.html’;

$str =~ s*yahoo.co.jp/index.html*google.or.jp/home.html*;

print $str;

id:windofjuly No.3

うぃんど回答回数2625ベストアンサー獲得回数11492011/10/03 20:50:48

ポイント33pt

(例1) 通常記法を使う

$str  =~ s!\Qhttp://www.yahoo.co.jp!http://www.google.co.jp!;

/ 以外の文字も使えますし、今回のように単純な置換であれば¥Eは省けます

 

(例2)汎用記法を使う

$str  =~ s{\Qhttp://www.yahoo.co.jp}{http://www.google.co.jp};
  • id:pmakino
    まどろっこしくて Perl らしくないですが、文字列関数 index と substr で原始的なマッチと置換ができます。
    下記は $str 中で最初に表れる $a を $b に置換する例です。

    $a = "http://www.yahoo.co.jp";
    $b = "http://www.google.co.jp";
    $str = "the url is http://www.yahoo.co.jp.";
    my $i = index($str, $a);
    if ($i >= 0) {
    substr $str, $i, length($a), $b;
    }
    print $str;

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません