dポイントプレゼントキャンペーン実施中!

perlプログラム内で、grepを行っております。
grep対象の中身に +、*、(、)、[、]などの文字列が含まれているため、エラーとなり、
プログラムがうまく動作しません。
grepしたい対象データ例:http://www.XXX.co.jp/○○+▲▲
http://www.XXX.co.jp/○○+▲▲の+を 文字として判断し、正規表現扱いではないとしたい。
http://www.XXX.co.jp/○○+▲▲を含む文字を抽出したい。

perl プログラムにおいて
@line1 = grep(/$url/,<ARG>);
という記述しておりますが、どのように変更すればよいでしょうか?

また、grepしたい対象データがファイルに格納されておりますが、
その中で、+を \+ にファイル一括変換する場合、:%s/+/\+/g で やろうとしても、変換されません。

perlプログラムでの対応、grep元ファイルの変換処理方法 それぞれのやり方について教えてください。

A 回答 (3件)

quotemeta ないし等価な \Q~\E

    • good
    • 0
この回答へのお礼

さっそくのご教授ありがとうございます。
quotemeta関数というものを利用して、やってみたいと思います。
なお、「等価な \Q~\E」とは どういうものでしょうか?

お礼日時:2011/01/20 09:52

有効な回答を求めるならば、実行環境(OS、デフォルトの文字コード、perlのバージョン、ファイルの文字コード、ファイルの読み取り方)などを記述しておいたほうがいいと思います。

    • good
    • 0
この回答へのお礼

あまり、プログラムについて詳しくないので、実行環境も意識して
今後 記載したいと思います。
ご指導 ありがとうございます。

お礼日時:2011/01/21 11:50

\Q から \E の間は正規表現におけるメタキャラクタとしての扱いをしない. ここでも書いた記憶があるので, 可能なら調べてみるといい.


余談:
「grep元ファイルの変換」で「:%s/+/\+/g で やろうとしても、変換されません。」とか書いてるんだけど, 「いかなるプログラムで変換しようとしたのか」くらいはちゃんと書いてください. 「何とかして Perl で変換しようとした」と思われても文句は言えないよ.
あと, なぜこれで変換できないのか理解してますか?

この回答への補足

\Q から \E の話 理解いたしました。
変換は vimで単純に行おうとしておりました。¥と正規表現扱いとしないで、置換したかったのですが、ファイル直接vimで開き、一括置換を 考えておりました。

補足日時:2011/01/21 11:49
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!