• 締切済み

正規表現についての質問です。

正規表現につての質問です。 今テキストファイルに下記のような漢字と数字が並んでいます。 そこから、漢字一文字だけの行を抜き出してきたいのですが、うまくいきません。PerlとCygwinを使用しています。よろしくお願いします。 人584504122 情報542701982 商品510342870 日414551872 方347990908 者347069359 中339925319 表示330177395 的324961911 私323727263 検索291502623 見ル285226619 場合275698771 一256241900 利用253752129 年240881734 時239273060 前228762989 店225241510 登録224560617   ・   ・    ・ プログラム中身 #! /usr/bin/perl -w #テキストから指定した単語などとマッチすると、 #その単語を含んだ文を抜き出してくる。 while(<>){ s/ +//g; s/\s+//g; if(/^([亜-煕]|[一-龠]){1}[0-9]*/){ print; print "\n"; } }

みんなの回答

  • A88No8
  • ベストアンサー率52% (836/1606)
回答No.3

こんにちは #2の補足です。  grepやsedで先頭が漢字1文字でその後にANK数字が続くパターンなら下記のようにします。 ^[亜-煕一-龠][0-9][0-9]*  正規表現に関してはそれほど違いはないのではと思って投稿しています。外していたらごめんなさい。

  • A88No8
  • ベストアンサー率52% (836/1606)
回答No.2

こんにちは  PHPについては門外漢なのですが、grepやsedの正規表現の場合に先頭の1文字目を漢字とするなら以下のようにします。 ^[亜-煕一-龠]  外していたらごめんなさい。

  • takapiii
  • ベストアンサー率55% (944/1707)
回答No.1

文字コードはなんでしょうかね…。 後、perlのバージョンが不明ですが、頭が漢字一文字で、その後ろに数字のみが繋がっている場合のみ抜き出すなら、質問者のソースをちょっと改造すると以下の感じです。 漢字の後に数字以外のものが入れば抜き出せません。 文字コードはeuc-jpを想定します。 use encoding "euc-jp"; while(<>){ s/ +//g; s/\s+//g; if(/^\p{Han}{1}\d*$/){ print; print "\n"; } }

関連するQ&A