- ベストアンサー
マッチ以外を置換について
test.txtのファイルの中に以下のコメントがはいっています。 --- test.txt(置換前) 各URLは以下の通りです。 (1)hoge.com (2)hoge123.com (3)hoge222.com --- ファイルの中のhoge.comはそのままで、以下のようにその他の文字は他の文字に置換を行いたいと思ってます。 --- test.txt(置換後) 各URLは以下の通りです。 (1)hoge.com (2)abc.com (3)abc.com --- 指定した文字(hoge.com)を置換する方法は簡単に行えるのですが、指定した文字以外の文字を置換する場合、どのように書けばいいでしょうか? どなたかよろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
そうか, シンプルに s///eg でいいんだ. e の存在を忘れてた.... 「URL を表す正規表現」を $url_regex とすると s/$url_regex/index($&, 'hoge.com') == -1 ? 'abc.com' : $&/eg; とか.
その他の回答 (3)
- ORUKA1951
- ベストアンサー率45% (5062/11036)
Tacosanが言われるように、まずURL部分の判別が必要です。そうしないと改行コードや"各URLは以下の通りです。"の部分まで該当してしまいます。 ⇒( http://jbpe.tripod.com/rfcj/rfc2396.ej.sjis.txt ) URL(URI)の規格が掲載されています。具体的には ⇒URI(URL) の正規表現( http://www.din.or.jp/~ohzaki/perl.htm#URI ) その上で、指定されたもの以外を置換します。
- Tacosan
- ベストアンサー率23% (3656/15482)
そもそも「URL かどうか」をどう判定するかって問題が残る (「URL」という文字列は URL か?) のだが, そこをクリアできれば「split→置換」とか「否定先読み」とかの方法がとれそう.
補足
確かに今回はドメインのみの明記の為、URLかどうかの判断は別として、今回は判別出来た場合において、否定先読みの書き方とか簡単にでいいので教えていただけないでしょうか? ググッてみたのですが、初めて聞いた事なので、どうも理解しにくくうまく書けませんでした。 よろしくお願いします。
- Tacosan
- ベストアンサー率23% (3656/15482)
具体的にどう置換したいのかよくわからんのだけど, 素直に「マッチしなかったら置換」って書けばいいんじゃないの? 単純には unless (/^hoge\.com$/) { なんか } みたいな感じ.
補足
私の書き方が分かりにくくすいません。 ちょっと書き方を変えて、簡単に説明させていただくと、特定のURL以外は他の文字に変更したいと思っております。 変更前 $hoge="各URLは以下の通りです。<br>(1)hoge.com(2)hoge123.com(3)hoge222.com"; $hogeの中のhoge.comはそのままで、それ以外のhoge123.comとhoge222.comを例えばabc.comに変更したいのです。 変更後 $hoge="各URLは以下の通りです。<br>(1)hoge.com(2)abc.com(3)abc.com"; まだ分かりにくいかもしれませんが、よろしくお願いします。
お礼
ありがとうございます! "e"オプションってありましたね…。 確かにこれを使っていけそうです☆ 大きなヒントをいただきありがとうございました。