
Perlで特殊文字の入った文字列置換を行いたいです。
例えば
HTMLファイルの中の
<a href = “http://abc.jp>を
<a href = “http://def.jp>に変えるとき
$old = ‘abc’;
$new = ‘def’;
open(INFILE,”test.html”)
while(<INFILE>){
print "infile\n";
if($_=~m|$old|){
$_=~s|$old|$new|g;
}
}
close INFILE;
で動きますが、URLに'?'が入ると検索が動作しません。
?の他にも<,&,%,なども特殊文字があります。
これらの文字が入った置換を行うにはどのようにしたら良いでしょうか?
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
ダブルクォートでくくった文字列のなかではエスケープシーケンスを評価するので
$old = "old.jp\?";
と
$old = "old.jp?";
は同じ挙動になるはず. ということで #3 の通り \Q~\E (あるいは quotemeta) を推奨.
ちなみに
if ($_ =~ m/$old/) {
$_ =~ s/$old/$new/g;
}
は
$_ =~ s/$old/$new/g;
で十分だし, さらにいえば対象が $_ なので
s/$old/$new/g;
だけでもいいね.

No.2
- 回答日時:
<a href = “
http://old.jp?aaa>を<a href = “http://new.jp.bbb>に変えたいとき
の例です。
indexとsubstrを使います。正規表現用の特殊文字も普通の文字と同じように扱えます。
$old = 'old.jp?aaa';
$new = 'new.jp.bbb';
open(INFILE,"test.html");
while(<INFILE>){
$pos = index($_,$old);
if ($pos >= 0){
substr($_,$pos,length($old),$new);
}
print $_;
}
close INFILE;
No.1
- 回答日時:
Perlの正規表現をマスターしよう
https://tutorial.perlzemi.com/blog/2010082712785 …
の
正規表現文字のエスケープ
が参考になると思います。
つまり、検索対象として特殊文字自体を指定するためには直前に\を付ければよいので
\?
とすればいいのではないでしょうか。
ありがとうございます。
直前に\をつけたら検索はうまく行きましたが、まだ問題があります。
参考URLはしっかり読んでみますが、補足しますので、もしすぐに解決できるならば、ご教示願いたいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBAでAA(BBB) → BBB.AA に置換したい 2 2022/10/30 13:59
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- UNIX・Linux bashでシングルクォート内の変数の組み込み方教えてください。 2 2023/02/14 19:30
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Excel(エクセル) 数式の置換がうまく行かない 6 2022/05/04 15:51
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正規表現で、特定の文字列を含...
-
VBA 置換文字がみつからない時
-
Excel・ユーザーフォームの情報...
-
csvデータ ダブルクォーテ...
-
フォントの色を保持したままセ...
-
Excel VBA 教えてください。 VB...
-
スペースで区切られた氏名から...
-
\\(円)記号を置換したい
-
特定の列のみ置換を行いたい
-
正規表現で置換
-
秀丸マクロで列ごとに一括置換...
-
各項目がダブルクォーテーショ...
-
テキストボックスの文字列を置...
-
Eclipse 改行後のタブ
-
SQL IIF と REPLACE のやりかた
-
c++で積分のプログラムを実行し...
-
秀丸での一括変換について
-
C#で空白行を削除する方法
-
【Excel VBA】文字列の置換作業...
-
csvデータのダブルクォーテーシ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 置換文字がみつからない時
-
正規表現で、特定の文字列を含...
-
csvデータ ダブルクォーテ...
-
各項目がダブルクォーテーショ...
-
Excel VBA リストに一致したデ...
-
スペースで区切られた氏名から...
-
秀丸エディタで、「-」や「ー」...
-
EXCELマクロを用いてグラフの系...
-
csvデータのダブルクォーテーシ...
-
C#で空白行を削除する方法
-
EXCEL警告「置換対象のデータが...
-
xmlファイル内の文字列置換
-
正規表現 特定の文字列を含む行...
-
テキストボックスの文字列を置...
-
○文字目に文字挿入
-
C言語でテキストファイルの内容...
-
複数のパワーポイントファイル...
-
c# ビルド直前にコードを置換で...
-
Excel・ユーザーフォームの情報...
-
\\(円)記号を置換したい
おすすめ情報
?に\をつけて
<a href = “http://old.jp?aaa>を
<a href = “http://new.jp.bbb>に変えたいとき
とりあえず
$old = "old.jp\?"
$new="new.jp."
とすると、置換らしきものはしてくれるのですが
<a href = “http://new.jp?aaa>
と、?が残ってしまいます。
さらに、
$old = "old.jp\?aaa"
$new="new.jp.bbb"
とすると、検索にひっかからないです。