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

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

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

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

Q&A

解決済

3回答

8683閲覧

正規表現で数字のみか文字のみでマッチさせたい

退会済みユーザー

退会済みユーザー

総合スコア0

正規表現

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

0グッド

2クリップ

投稿2016/03/23 08:40

###前提・実現したいこと
正規表現で数字のみか文字のみでマッチさせたいです。
文字のみなら|(パイプ)でいずれかの単語にマッチさせることができますが、正規表現でいずれかの正規表現にマッチさせることは可能でしょうか?
よろしくお願いします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

括弧でくくって、OR条件をかけることができます。

# 例:英字1文字以上 or 数字1文字以上 ([a-zA-Z]+)|([0-9]+)

投稿2016/03/23 08:43

maisumakun

総合スコア145183

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

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

退会済みユーザー

退会済みユーザー

2016/03/23 08:49

なるほど。 ありがとうございます。
KiyoshiMotoki

2016/03/23 14:54

maisumakun様 行頭・行末を示すメタ指定がないので、これだと "英字か数字を1文字以上含む文字列" にマッチしてしまうかと。 PHPでの実行結果を、私の回答に付記させていただきました。
guest

0

数字のみか文字のみでマッチ

であれば、^[a-zA-Z]+$|^[0-9]+$ですね。

PHPでの実行結果は、以下の通りです。

テストコード

php

1<?php 2$line = '01ab'; 3 4if (preg_match('/([a-zA-Z]+)|([0-9]+)/', $line) === 1) { 5 echo "Case1: match.\n"; 6} else { 7 echo "Case1: don't match.\n"; 8} 9 10if (preg_match('/^[a-zA-Z]+$|^[0-9]+$/', $line) === 1) { 11 echo "Case2: match.\n"; 12} else { 13 echo "Case2: don't match.\n"; 14} 15 16 17$line = '0123'; 18 19if (preg_match('/([a-zA-Z]+)|([0-9]+)/', $line) === 1) { 20 echo "Case3: match.\n"; 21} else { 22 echo "Case3: don't match.\n"; 23} 24 25if (preg_match('/^[a-zA-Z]+$|^[0-9]+$/', $line) === 1) { 26 echo "Case4: match.\n"; 27} else { 28 echo "Case4: don't match.\n"; 29} 30 31 32$line = 'abcd'; 33 34if (preg_match('/([a-zA-Z]+)|([0-9]+)/', $line) === 1) { 35 echo "Case5: match.\n"; 36} else { 37 echo "Case5: don't match.\n"; 38} 39 40if (preg_match('/^[a-zA-Z]+$|^[0-9]+$/', $line) === 1) { 41 echo "Case6: match.\n"; 42} else { 43 echo "Case6: don't match.\n"; 44}

実行結果

Case1: match. Case2: don't match. Case3: match. Case4: match. Case5: match. Case6: match.

投稿2016/03/23 14:52

編集2016/03/23 15:00
KiyoshiMotoki

総合スコア4791

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

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

0

ruby の場合です。

...
文字クラスの略記法
...
\d 10進数字 [0-9]
...
POSIX 文字クラス
....
[:alpha:] 英字 (Letter | Mark)
...
[:digit:] 数字 (Decimal_Number)
...

この記述を利用して、
[:alpha:]+ と \d+ を or でつなげた正規表現を使ってみました。
string.match(/\A([[:alpha:]]+|\d+)\z/)

$ irb irb(main):001:0> "abc".match(/\A([[:alpha:]]+|\d+)\z/) => #<MatchData "abc" 1:"abc"> irb(main):002:0> "123".match(/\A([[:alpha:]]+|\d+)\z/) => #<MatchData "123" 1:"123"> irb(main):003:0> "a1".match(/\A([[:alpha:]]+|\d+)\z/) => nil irb(main):004:0> " abc".match(/\A([[:alpha:]]+|\d+)\z/) => nil

投稿2016/03/23 14:26

katoy

総合スコア22324

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問