次の例で括弧を追加すると異なる応答が得られる理由を理解しようとしています。説明をいただければ幸いです
> regexec("\\w*\\.*", "12.3")
[[1]]
[1] 1
attr(,"match.length")
[1] 3
> regexec("[\\w*\\.*]", "12.3")
[[1]]
[1] 3
attr(,"match.length")
[1] 1
や[
などの]
特殊文字は通常の文字として扱われ、ここでは、単語文字 (文字、数字、またはアンダースコア) または aまたは a (つまり、最大 1 文字が許可されている) を検索する文字クラスで囲まれた正規表現を指定しています。)。.
*
\\w*\\.*
*
.
文字クラスは、その内部で指定された任意の文字の出現を許可します。ここで、文字クラス内で\\w
は、 として扱われます\w
。\\.
はドットとして扱われます (.
ここでは特別な意味はありません)
一致するパターンに対して\\w*\\.*
、0 個以上の単語文字とそれに続く 0 個以上の文字が含まれて.
おり、入力12.3
には 2 桁の数字とそれに続くドットが含まれているため、一致の長さは 3 になります。
一致するパターンに対して[\\w*\\.*]
、単語文字、*、.
入力の先頭に数字があるため、一致しています。したがって、一致の長さは 1 です。
括弧は「文字クラス」を作成します。これは、「リストされた文字のいずれかに一致する」ことを意味します。最初のものは「0 個以上の \w の後に 0 個以上のピリオドが続くものに一致」です。2 つ目は、「\w、アスタリスク、ピリオド、またはアスタリスク (冗長) のいずれかに一致する」です。