
perlで記号除去を行いたいのですがうまく行かず困っています。
文字列はEUCです。そこから$patternのような記号を削除したいのですが・・・。
http://www.din.or.jp/~ohzaki/perl.htm#Character
正しくパターンマッチさせる
を参考に
$ascii = '[\x00-\x7F]';
$twoBytes = '[\x8E\xA1-\xFE][\xA1-\xFE]';
$threeBytes = '\x8F[\xA1-\xFE][\xA1-\xFE]';
$pattern=q([\!!\##\%%\--―ーー・・\//\;;\??\\¥__`‘\{{\}}\++\((\))\[[\] ]\**@@\$$&&\::\>>\<<\~ ̄\^^\"”\'’ \,,\..\==\||\、、\。。]);
if ($data =~ s/((?:$ascii|$twoBytes|$threeBytes)*?)(?:$pattern)/$1/mg) {
print "マッチした $& \n";
}
print $data;
として$dataに下の2つを与えてみました。
サンプル1
【あいうえお】
サンプル2
【aaa】
ところが・・・
サンプル1
(出力なし)
サンプル2
旻aaa桿
何が悪いのかわかりません・・・
ためしにパターンに【】を追加したところサンプル2はうまく行きましたが
サンプル1に変化がありません。(あいうえお も消えてしまう)
何か思い当たる点がありましたら教えてください。よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
正規表現の[~] の中で全角文字を使っているのが原因でしょう。
たとえば、%はEUCで \xa1\xf3 ですから、[%%] は、「\x25 か \xa1 か \xf3」という1バイトにマッチします。
そういう場合は、
正規表現を [\!\#\%\-…]|!|%|-|… といった感じで、
全角文字は | で並べる形にするのがいいでしょう。
あるいは、一手間かかりますが、エンコーディングの処理をして、
スクリプトはuse utf8しておけば、
$ascii|$twoBytes|$threeByte みたいな文字の境目チェックは不要で、
$data =~ /[!#%]/ と書くだけでも全角文字にマッチさせられます。
この回答への補足
おおおおお!!!!
うまくいきました!!
ただ、性能はものすごく悪いみたいです(泣
やはり泣き別れ防止の
?:$ascii|$twoBytes|$threeBytes
のあたりがよくないみたいですね。
あまり文字列が長いとコアダンプするし・・・
# ただし、最近のlinuxではコアダンプしないみたいです。
でも できてすっきりしました!
ありがとうございました!!
No.1
- 回答日時:
こんにちは
たぶん、UNIX系の環境ですよね。
なかなかメッセージが付かないようなのでにぎやかしということで(^^;
難しく考えないで $pattern の文字があったら繰返し削除じゃだめですか?
例えば、sed だったら 「s/$pattern//g」という雰囲気 (sedですから、当然 $pattern は展開して記述しますけど)。
perl でも同様にできないでしょうかね。 コードを眺めたらできそうな気がしましたので。
それと\でエスケープするメタ文字ってそんなに多かったですか?
/*+.,?$\[]^{}|() ←16文字よりありましたっけ?
外してたら、ごめんなさい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBA 文字列変換と指定した列にある日時データから時間を削除する方法について 2 2022/04/14 15:23
- 写真 写真(画像)編集スキルを質問する時 1 2022/12/07 14:14
- 計算機科学 ディジタル信号の問題がわかりません 1 2022/05/11 21:12
- CGI サイト訪問者の情報を取得したい 1 2023/02/21 11:03
- Excel(エクセル) VBA 指定した列にある日時データから時間を削除する方法について 4 2022/04/14 11:17
- 統計学 比率に関する質問ですが 例えば 1)初めの物質Aというものの濃度は知らないが 物質Aに溶媒を3回添加 5 2023/04/02 00:27
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- 政治学 もはや選挙は「サンプル調査」なのか? 1 2023/04/15 14:30
- 化学 吸光度から検量線、含量の求め方を教えてください。 2 2022/08/11 00:28
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正規表現のパターンに変数を指...
-
行末の正規表現について。
-
CSVファイルの中で、「 , 」カ...
-
住宅にカナを入力する際に丁目...
-
Excelについて質問です。 セル...
-
エクセルで数値を全角文字(カ...
-
全角英数字の必要性が理解できない
-
VBA 文字に半角が含まれて...
-
VB.net、テキストボックス入力...
-
文字コードの%E3%80%とは何です...
-
プログラミングでは、半角括弧...
-
Excel VBAでPDFファイルをMicro...
-
「一角」って何でしょうか
-
CSVの定義
-
csvデータのダブルクォーテーシ...
-
WORDで改ページすると時々グレ...
-
文字の網掛け設定後段区切りを...
-
ACCESS VBA でのバイナリデー...
-
C#で、テキストボックスの入力...
-
COBOL・全角判定
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
おすすめ情報