質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

2回答

1582閲覧

perlで数字と文字が混ざっているものか判断したい

yooashleaf

総合スコア32

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2019/01/18 15:23

表題の通りなのですが、
perlで数字と文字が混ざっているものか判断したいです。

その文字列が
1.数字のみか
2.文字のみか
3.数字と文字の混在か
この3つははっきりと区別したいです。

正規表現で「1.数字のみのか」の判定は以下のようにやると思うのですが、
残りの2つが分かりません。

$data = "202号室 佐藤";

if ($data =~ /^[0-9]+$/) {
print "数字のみです。\n";
}elsif(){
print "文字のみです。\n";
}elsif(){
print "数字と文字の混在です。\n";
}

どなたか、elsifの条件に入るコードをご教授お願い致します。
宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

数字のみ・文字のみについてはfu7mu4さんの回答にある考え方でOK。では、「混在」はというと、混在とはすなわち「数字のみ」・「文字のみ」以外ということですから、単純に補集合をとればいいわけです。だから最後にはelsifを持ってくる必要はありません。

perl

1if ($data =~ /^\d+$/) { 2 print "数字のみです。\n"; 3}elsif($data =~ /^\D+$/){ 4 print "文字のみです。\n"; 5}else{ 6 print "数字と文字の混在です。\n"; 7}

\d, \Dはそれぞれ[0-9],[^0-9]と同じ意味です。

以上で解決のはずですが、参考までに、「数字と数字以外の両方を含む文字列」にマッチするパターンを使うとすれば次のようになります。

if($data =~ /(?=.*\d)(?=.*\D)/){ print "mix\n"; }

投稿2019/01/18 19:27

KojiDoi

総合スコア13671

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yooashleaf

2019/01/19 22:10

分かりやすいご回答ありがとうございます。 バッチリできました!本当に感謝致します!
guest

0

数字以外を文字列と考えますと
数字以外の正規表現はこのようになります。

perl

1[^0-9]

したがって

perl

1$data =~ /^[^0-9]+$/

になると思います。

投稿2019/01/18 15:57

fu7mu4

総合スコア1088

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yooashleaf

2019/01/18 17:55

回答ありがとうございます! その場合ですと「文字のみ」なのか「数字と文字の混在」なのかは判別できるのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問