前提
ここに質問の内容を詳しく書いてください。
(例)
Perlで正規表現で困っています。
正規表現で、それぞれ、ひらがな、カタカナ、漢字をif文でひっかけたいのですが、なかなかうまくいきません。
わかる方、ご教授願えればと思います。
よろしくお願いします。
実現したいこと
ここに実現したいことを箇条書きで書いてください。
正規表現で、それぞれ、ひらがな、カタカナ、漢字をif文で捕捉したいのです。
発生している問題・エラーメッセージ
エラーメッセージは何も表示されていません。
該当のソースコード
Perl
1use strict; 2my $hiragana = 'やまだ'; 3my $katakana = 'ヤマダ'; 4my $kanji = '山田'; 5my $msg = ""; 6my $flg = 0; 7if($hiragana =~ /[\p{Hiragana}]/){ 8 $msg = 'ひらがなが含まれています\n'; 9 $flg = 1; 10} 11if($katakana =~ /[\p{Katakana}]/){ 12 $msg .= 'カタカナが含まれています\n'; 13 $flg = 1; 14} 15if($kanji !~ /[\p{Han}]/){ 16 $msg .= '漢字以外が含まれています\n'; 17 $flg = 1; 18} 19if($flg == 1){ 20 print $msg; 21}
試したこと
それぞれ、アルファベットや、ひらがなや、カタカナや、漢字を値に入れて試しても、思うように動きませんでした。
「^[\u3040-\u309F]+$」のような書き方も試しましたがこれも、思うようにいきませんでした。
補足情報(FW/ツールのバージョンなど)
動かしているのは、レンタルサーバーです。
Perlのバージョンは、5.16です。
use utf8; を追加してして下さい。
そうですね。
質問にuse utf8;を追加する方法がわからないですが、
binmode(STDOUT, ':utf8');
これを、書いてあります。
いかがでしょうか。
binmode(STDOUT, ':utf8');
と書いてあるのは、手元のローカルのファイルに書いてあります。
use strict; の直後に use utf8; を入れてみて下さい。
use strict; の直後に use utf8; を入れてみたのですが、成功しませんでした。
Perl のバージョンの問題ですかね。手元の Perl は v5.34.0 ですが、use utf8; を入れて実行すると、
ひらがなが含まれています
カタカナが含まれています
という結果になります。
ソースコード自身が別のエンコーディングで保存されているのでは?
「漢字が含まれていない」っていう正規表現に漢字がマッチしないのは正しいんじゃないでしょうか
Perl のバージョンの問題かもしれないんですね。
情報、ありがとうございます。
ソースコードは、UTF-8のエンコーディングで保存しています。
そうですね、「漢字が含まれる」のですから、「!~」じゃなくて「=~」でしたね。
ご指摘、ありがとうございます。
このコードでうまくいく環境があることがわかったのであれば、ここに書いていないこと(あなたが省略していること)に原因があるとは思いませんか?
まず本番のコードは置いておいて、回答者と共有したコードで試すべきです。
binmode が省略されているのと同じく、演算子も変えたのであれば、指摘されたところを直したコードで試し、質問のコードをそのコードそのものに差し替え、正確な実際の出力を載せるのが良いでしょう。
バージョンが原因というのは考えにくいと思っていますが、それでも回答者の実行結果と異なるのであれば環境や実行方法に問題があると思います。
「成功しない」というのはどんな結果になってるんだろ
use utf8の必要性については
https://teratail.com/questions/bcrd1y64eodj74
で説明したはずですが、結局本質的なことを何一つ理解していただけてなかったようで残念に思いますよ。use utf8とbinmode...は全然目的が違うので、どちらかがもう一方の代用にできるものではありません。
さて、ここまでのサジェストを経て、コードを書き換えて試されたと思います。普通であれば成功しているはずですが、そうでないのだとしたら何がどう「うまくいかない」のか、具体的に説明していただきたいです。無いはずの文字種を検出してしまう? あるはずの文字種を検出しない? メッセージが文字化け? それともほかの問題?
私のローカルの環境でも上記のソースコードで試したのしたのですが、文言は一切表示されませんでした。
ちなみに、私のローカルの環境は、Windows11で、perlのバージョンは、5.24です。
長音「ー」はカタカナ扱いでしょうか?
「ヴ」のひらがな「ゔ」は「う゛」だったらどうしますか?
「あゃ」のような存在しない読みはどうしますか?
上記コードではだめと再三言われてるのに頑なに直さないところに狂気を感じる。
氏名チェックや、フリガナチェックに使用している為、長音「ー」はどこにも含まれないと考えています。
同じ理由で、「ヴ」のひらがな「ゔ」は「う゛」も必要ないと思っています。
「あゃ」のような存在しない読みも含まれなくていいと思います。

回答1件
あなたの回答
tips
プレビュー