正規表現
皆さん、正規表現使いこなしていますか?
私は使いこなせていません(^o^;
一時期取り組んだりしまして覚えたりしますが、時間が経つときれいさっぱり忘れています。
さて久々にそんな正規表現に取り組みます。
どうして取り組むかと言いますと、MySQLへのCSVファイルのインポートでエラーで引っかかる部分があって、それを別の文字に置換したいからです。
テーブルのカラム数とCSVのカラム数は一致しているはずなのに、インポートをすると・・・
CSV 入力のカラム数が不正です (行: 1)
と言ってインポート途中で落ちてしまいます(-_-;
で、その行を削除して再度インポートするんですが、それが何度も発生すると偉い面倒くさいことに・・・。
この障害があるお陰で、昨年からのWEBサイト作成のデータ量が少ない状態でしか運用する事が出来ませんでした(;_;)
以前は時間がなかったのでとにかく、無理矢理エラー行を削除してはアップ、エラー行を削除してはアップ、という人力での頑張りで無理矢理やってました。
それを何とかしたくて正規表現にチャレンジです!
参考にさせて頂いたサイトは下記。
正規表現のサンプルが多数載っています。
正規表現サンプル集
- [正規表現]
- [開発向け]
CSVに含まれる「,」の内、前後が「"」(ダブルクォーテーション)ではない物を抽出したくて探していました。取りあえず後ろが「"」以外のを抽出する正規表現は ,(?!") になります。やったー!
2015/04/16 18:51
対象となるのは「,」半角カンマ
今回正規表現で抽出したいのは「,」半角カンマです。
CSVのカラムとカラムの間の区切り文字になっています。
これが間違ってカラムのデータ内に混在しているが故にエラーになっている事が最近の調査により判明しました!(自分での調査)
そこでカラムのデータ内にある「,」だけを除外したい訳です。
カラムデータは「""」半角ダブルクォーテーションで囲われています。
そしてカラム同士は「,」半角カンマで区切られています。
下記以外の組み合わせの「,」を抽出したい訳です。
","
そのためには下記が使えそうです!
後ろが「ple」ではない「sam」
sam(?!ple)
という正規表現で「後ろが該当文字ではない、検索文字」を探す事が出来るようです。
という訳で「,」の内、後ろが「"」ではない文字を探す正規表現は・・・
,(?!")
になります!
これにて置換した後にCSVファイルをインポートしてみると・・・
成功!
一件もインポートエラーが発生しなくなりました!
これで一気に作業スピードが上がります!
何とか今月中に目標データ量まで上げたいと思います!