トップページに戻る
次の正規表現パズルへ
前の正規表現パズルへ
5-25 全称肯定命題と存在否定命題
正規表現パズル
正規表現での全称肯定命題と存在否定命題に関する考察です。
正規表現で、全ての文字が数字であるか調べる方法と
正規表現で、全ての文字が数字でない調べる方法について考察します。
対象データ
12345
abc123456
abcdef
正規表現
全ての文字が数字であるか調べるには、
[^0-9]にマッチする文字があるか調べます。
^[0-9]+$で行頭から行末までたどってもいいですが・・・
全ての文字が数字でないか調べるには、
[0-9]にマッチする文字があるか調べます。
^[^0-9]+$で行頭から行末までたどってもいいですが・・・
解説
空の文字列を考えないとして、下記の同値変形を行ってます。
少なくとも1つ、の形に変形するのがポイントです。
■■■全て数字かを調べる■■■
全称肯定命題 全ての文字が数字である ⇔
存在否定命題 少なくとも1文字の、数字でない文字がない ⇔
否定文字クラスで数字でない文字を検索してもマッチしない
■■■全ての文字が数字以外かを調べる■■■
全称肯定命題 全ての文字が数字でない ⇔
存在否定命題 少なくとも1文字の、数字がない ⇔
文字クラスで数字を検索してもマッチしない
Oracle10gでの実行結果
col Val for a10
select Val,
case when RegExp_Like(Val,'[^0-9]')
then '少なくとも1文字は数字以外'
else '全て数字' end as chk1,
case when RegExp_Like(Val,'[0-9]')
then '少なくとも1文字は数字'
else '全ての文字が数字以外' end as chk2
from (select '12345' as Val from dual union all
select 'abc123456' from dual union all
select 'abcdef' from dual);
Val chk1 chk2
---------- ------------------------- ---------------------
12345 全て数字 少なくとも1文字は数字
abc123456 少なくとも1文字は数字以外 少なくとも1文字は数字
abcdef 少なくとも1文字は数字以外 全ての文字が数字以外