• ベストアンサー

perlを使って英文だけを取り出したい。(UTF-8の場合)

perlを使って英文だけを取り出したい。(UTF-8の場合) 下記perlは、UTF-8で記述されています。 この場合、$str1のように、英文が混じっています。 その中から、英語だけの文字を取り出すことは、できないでしょうか? もし、簡単なサブルーチンなどご存知でしたら教えてください。 宜しくお願い致します。 $str1 = "さま z a マ な mo じ が ハイ っ ています。"; $str2 = &omit($str1); sub omit{ } print "$str2"; 結果出力 --------- z a mo

  • Perl
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

sub omit{ my $str = shift ; $str =~ tr/a-zA-Z //cd;#英字以外は削除 $str =~ s/\s+/ /g;#スペースの縮約 return $str; }

ayaka19801201
質問者

お礼

ありがとうございます。 スペースの短縮まで教えてくださり、ありがとうございました!!

その他の回答 (1)

回答No.1

> 英語だけの文字 ascii 文字すべてなのか、その中でもアルファベットだけなのか、もしくは全角英(数)文字も含むのか、どうなのでしょう。

ayaka19801201
質問者

お礼

回答いただきありがとうございます。 言葉足らずで申し訳ありません。 #2さまの回答で解決いたしました。 色々改良して調整してみようと思っていますので、 もし、分からないときは、質問させていただきますので、 その折は、宜しくお願い致します。

関連するQ&A

  • perlを使って英文だけを取り出したい。

    下記($str1)のように、英文が混じっています。 その中から、英語だけの文字を取り出すことは、できないでしょうか? もし、簡単なサブルーチンなどご存知でしたら教えてください。 宜しくお願い致します。 $str1 = "さま z a マ な mo じ が ハイ っ ています。"; $str2 = &omit($str1); sub omit{ } print "$str2"; 結果出力 --------- z a mo

    • ベストアンサー
    • Perl
  • Perlのサブルーチンで連想配列(ハッシュ)を渡す

    Perlのサブルーチンで連想配列(ハッシュ)を渡す方法 -------------------------------------- $str=rep::replace(%A,$B,@C); -------------------------------------- sub refidrep ( \%\$\@ ){ my(%A,$B,@C)=(@_); } -------------------------------------- では、上手くいきませんでした。 どのようにしたら、連想配列をサブルーチンに渡せるのでしょうか? 分かる方いらっしゃいましたらご教授ください。

    • ベストアンサー
    • Perl
  • UTF8でperlスクリプトを書くと年月日が表示しない

    UTF-8で下記スクリプトを書いて実行すると、 $yy年$mo月$dd日 にあたる部分が表示されず、($day)$hh:$mm:$ss の部分しか表示されません。 ------------------------------------ #!/usr/bin/perl use utf8; use Encode; &get_date(); print "Content-type: text/html\;charset=utf-8\n\n"; print encode('utf8',"$date"); exit; sub get_date { ($ss,$mm,$hh,$dd,$mo,$yy,$day)= localtime(time); $day = ("日","月","火","水","木","金","土")[$day]; $yy = $yy+1900; $mo++; if ( $mo < 10 ) { $mo = "0$mo"; } if ( $dd < 10 ) { $dd = "0$dd"; } if ( $hh < 10 ) { $hh = "0$hh"; } if ( $mm < 10 ) { $mm = "0$mm"; } if ( $ss < 10 ) { $ss = "0$ss"; } $date = "$yy年$mo月$dd日($day)$hh:$mm:$ss"; } ------------------------------ EUCコードでスクリプトを書いてencodeなど不要な部分を変更した場合は$yy年$mo月$dd日の部分も表示されます。 また、上記  $date = "$yy年$mo月$dd日($day)$hh:$mm:$ss"; の部分を下記のように変更すると表示されますが... -------------------------- $date = $yy; $date .="年"; $date .= $mo; $date .="月"; $date .= $dd; $date .="日"; $date .="($day)$hh:$mm:$ss"; -------------------------- なぜ一括してダブルクォートで囲むと表示されないのでしょうか? 今まではEUCでスクリプトを書いておりました。UTF8に翻弄されております... どうぞよろしくお願いいたします。

    • ベストアンサー
    • Perl
  • Perl:Unicodeプロパティ作れない

    お世話になります。 Unicodeの文字プロパティの使い方を学ぶために、以下のようなスクリプトをUTF-8で保存しました。 ============ #! /bin/perl # # utf8_unireg.pl use 5.010; use strict; use warnings; use utf8; binmode STDOUT, ":encoding(shift_jis)"; my $str = "a:b:c:"; say join "|", ($str =~ /\p{ASCII}/g); say join "|", ($str =~ /\p{AsciiAlpha}/g); sub AsciiAlpha { return <<END; 0041 005A # A-Z 0061 007A # a-z END } ============ 実行するとこうなります。 ============ C:\Perl\perl>utf8_unireg2.pl a|:|b|:|c|: Can't find Unicode property definition "AsciiAlpha" at C:\Perl\perl\utf8_unireg2.pl line 14. ============ \p{AsciiAlpha}というプロパティの作成に失敗しているようです。。 なぜか分かりますでしょうか? よろしくお願いします。

    • ベストアンサー
    • Perl
  • JavaScriptでPerlのサブルーチンを呼び出すには?

    JavaScriptでPerlのサブルーチンを呼び出すことはできますか。 #Perl Sub Func_a(){ ... } この Func_a 関数をJavaScriptから呼び出したいのです。

  • WindowsでUTF-8のPerlスクリプトを実行する場合。。。

    お世話になります。 2006年に発行された「まるごとPerl」というムックの「まるごとEncode」という記事を見て Perl の日本語処理の勉強をしています。 本記事は Perl5.8 対象と思われますが私は Strawberry Perl 5.10.0 を Windows XP SP3 で使っています。 #! perl # list1 -- 日本語の文字を1文字として解釈(UTF-8で保存) use strict; use warnings; use utf8; my $text = '漢字、カタカナ、ひらがなの混じったtext'; print substr($text, 3, 4); というサンプルコードがあって、実行結果は「カタカナ」になると書いてあります。 要するに substr 関数が use utf8; によってバイト単位ではなくて文字単位で効くようになるので、4文字目から4文字が正しく取ってこられるという実験ですが、Windows の DOS 窓で実験すると、当然端末コードは Shift_JIS というか CP932 ですので、 Wide character in print at C:\Marugoto\list1.pl line 8. 繧ォ繧ソ繧ォ繝 となります。 そこで、上のコードに binmode 関数を足して、 #! perl # list1 -- 日本語の文字を1文字として解釈(UTF-8で保存) use strict; use warnings; use utf8; binmode STDOUT, ':encoding(cp932)'; # 追加 my $text = '漢字、カタカナ、ひらがなの混じったtext'; print substr($text, 3, 4); とすると正しく動作しました。 次に、 #! perl # list2 -- 1オクテットを1文字として解釈(UTF-8で保存) use strict; use warnings; my $text = '漢字、カタカナ、ひらがなの混じったtext'; print substr($text, 9, 12); というリストがあって、今度は use utf8; がないのでバイトモードで使う(substr 関数は 9 バイト目から 12 バイトを取ってくる。UTF-8 は全角日本語文字が1文字3バイトなので)という実験ですが、これもそのまま DOS 窓で実行すると 繧ォ繧ソ繧ォ繝 となるので、さっきと同じように binmode 関数を使って、 #! perl # list2 -- 1オクテットを1文字として解釈(UTF-8で保存) use strict; use warnings; binmode STDOUT, ':encoding(cp932)'; # 追加 my $text = '漢字、カタカナ、ひらがなの混じったtext'; print substr($text, 9, 12); と書いたのですが、 ・\x{0082}" does not map to cp932. "\x{0082}" does not map to cp932. "\x{00bf}" does not map to cp932. "\x{0082}" does not map to cp932. "\x{0083}" does not map to cp932. "\x{008a}" does not map to cp932. a\x{0082}≪a\x{0082}\x{00bf}a\x{0082}≪a\x{0083}\x{008a} のようになりました。 もちろん、プログラムを Shift_JIS で保存して substr($text, 6, 8) とすれば正しく実行できますが、プログラムを UTF-8 で保存しつつ、Windows で正しく表示する方法はあるでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • perlで英数字を取り出すには?

    Perlで英数字下記の条件で取り出したいのですがどのようにすればよいでしょうか? ご返答いただけるととても助かります。 宜しくお願い致します。 条件 英数字と半角文字とスペースのみを取り出したい。(それ以外の文字は半角スペースに置き換えたい。) また、連続するスペースは削除したい。 ------------------ $str ='※第25回Ski Festival開催'; $str =~ ???????[0-9A-Za-z ] print $str; ------------------ 期待する結果 25 Ski Festival

    • ベストアンサー
    • CGI
  • オブジェクト? perlをオーバーライドする方法?

    perl 5.6を使っております。 Perl5.8では PerlIOが入出力の際に文字コードを自動変換しているのですが この機能を5.6でもスクリプト互換で使いたい(スクリプトを5.6と5.8を同じにする)のですが、 既存のprint, getc, read, write関数をオーバーライド?することは可能でしょうか? 一々、if(5.8 <= $])としたくないためです。 例えば、外部がeucでperl処理がutf8の場合 sub getc{ return Jcode->new(...)->utf8; } sub print{ return Jcode->new(...)->euc; } sub read{ return Jcode->new(...)->utf8; } sub write{ return Jcode->new(...)->euc; }

    • ベストアンサー
    • Perl
  • Perl/Tk使用時のUTF-8コード文字の表示

    Windows98SE上でActivePerl5.8.0使用です。  #Perlはここ数年愛用していますが、Tkは数日手をつけただけの初心者です 例えば、  print OUT "☆ Hi! ★\n" ; #☆★はUTF-8 のようにファイルにUTF-8コードで書き出すことは可能ですが、 Tkを用いてWindowにUTF-8コードの文字を表示させようとすると失敗します。 例えば、Windowのタイトルを  $top -> title('☆test1★') ; #☆★はUTF-8 とすると、表示は「笘・est1笘・」と文字化けしてしまいます。 Perl/Tkで作成したWindow上でUTF-8コードの文字を表示させる方法は無いでしょうか?

    • ベストアンサー
    • Perl
  • [perl5.8] utf8で文字出力すると文字化けする

    perl5.8で、テキストをunicode(utf8)で出力したのですが、文字化けします。 ソースは以下のとおりです。 -----ソース----- use open OUT => ":encoding(utf8)"; open(OUT, ">utf8.txt"); print OUT "utf8だよ\n"; close(OUT); ----------------- できたファイルはutf8エンコードなのですが、 エディタで見ると「だよ」が文字化けします。 ちなみにフリーソフトで、SJIS形式の「utf8だよ」が 書かれたファイルをutf8に変換すると、文字化けしません。 フリーソフトで生成したutf8ファイルと、 自作perlで生成したutf8ファイルとを バイナリエディタで読込み比較すると 75746638E381A0E382880D0A (フリーソフト) 75746638C282C2BEC282C3A60D0A (自作perl) という差が出ています。 原因がお分かりになる方、知恵をお貸し願えますか。 よろしくお願いします。

    • ベストアンサー
    • Perl

専門家に質問してみよう