###前提・実現したいこと
正規表現で数字のみか文字のみでマッチさせたいです。
文字のみなら|(パイプ)でいずれかの単語にマッチさせることができますが、正規表現でいずれかの正規表現にマッチさせることは可能でしょうか?
よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
括弧でくくって、OR条件をかけることができます。
# 例:英字1文字以上 or 数字1文字以上 ([a-zA-Z]+)|([0-9]+)
投稿2016/03/23 08:43
総合スコア145183
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総合スコア4791
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ruby の場合です。
- Ruby 2.2.0 リファレンスマニュアル > 正規表現 http://docs.ruby-lang.org/ja/2.2.0/doc/spec=2fregexp.html
...
文字クラスの略記法
...
\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
総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/03/23 08:49
2016/03/23 14:54