トップページに戻る    前の豆知識へ

文字クラスの中でのメタキャラ

詳説正規表現2版の9ページ
詳説正規表現3版の9ページ

文字クラスは、また別のミニ言語と考えるとよい。どのメタ文字をサポートし、
それらがどのような意味を持つかは、文字クラスの中と外とでまったく異なる。

をふまえて、文字クラスの中での、メタキャラを使用する調査です。


調査結果

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
Oracle 11.2.0.1.0
select
case when RegExp_Like('A','[*]')     then 1 else 0 end as Match1,
case when RegExp_Like('*','[*]')     then 1 else 0 end as Match2,
case when RegExp_Like('\','[\*]')    then 1 else 0 end as Match3,
case when RegExp_Like('  ','[\s]\s') then 1 else 0 end as Match4
from dual;

Match1  Match2  Match3  Match4
------  ------  ------  ------
     0       1       1       0

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
C# 2008
using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        Console.WriteLine("Match1={0}", Regex.IsMatch(@"A", @"[*]"));     //False
        Console.WriteLine("Match2={0}", Regex.IsMatch(@"*", @"[*]"));     //True
        Console.WriteLine("Match3={0}", Regex.IsMatch(@"\", @"[\*]"));    //False
        Console.WriteLine("Match3={0}", Regex.IsMatch(@"  ", @"[\s]\s")); //True
    }
}


調査結果のまとめ

[\*] という記述が、
Oracleでは、文字としての\と、文字としての*とみなしますね。
C#だとエスケープされた*とみなしてますね。

[\s] という記述が、
Oracleでは、文字としての\と、文字としてのsとみなしますね。
C#だと文字クラス\sとして空白を指定したとみなしてますね。

文字クラスの中でメタキャラを使う際は、
正規表現エンジンによって挙動が違うため要注意です。