回答編集履歴
3
* 修正
test
CHANGED
@@ -22,4 +22,4 @@
|
|
22
22
|
|
23
23
|
|
24
24
|
|
25
|
-
逆に `a.*(b|bb|bbb)$` のように直前に制約がなければ `.*` が任意の
|
25
|
+
逆に `a.*(b|bb|bbb)$` のように直前に制約がなければ `.*` が `b` の直前にある任意のゼロ文字以上にマッチし続けるので直前に何がきていようと常に一番左の `b` が試行されて `bb` や `bbb` は試行されません。
|
2
修正
test
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
|
16
16
|
|
17
|
-
連続する必要があるので、「『\d$、\dd$、[01]\d\d$、2[0-4]\d$、25[0-5]$』の何れかが、直前までのパターンに
|
17
|
+
連続する必要があるので、「『\d$、\dd$、[01]\d\d$、2[0-4]\d$、25[0-5]$』の何れかが、直前までのパターンに接しているもの」を左から試行することになります。
|
18
18
|
|
19
19
|
|
20
20
|
|
1
詳細を追加
test
CHANGED
@@ -1,11 +1,25 @@
|
|
1
|
-
|
1
|
+
> 逆にドル記号があったときに「111」がマッチする理由として行末を意味するドル記号が存在しているから「1」がマッチしなくなるというのが中々理解することができません。ドル記号がなかった時と同様に左から順に選択が試行されないのは、なぜなのでしょうか。
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
|
5
|
+
選択は左から順に試行されています。`\d$` 単独の場合は `1` にマッチしますが、これはそれ以前のパターンに連続している必要があるからです。
|
6
|
-
|
7
|
-
`a\d$`
|
8
6
|
|
9
7
|
|
10
8
|
|
11
|
-
`a1` はマッチしますが `ab1` にはマッチしません。`\d$` が `a` に続いていないからです。
|
9
|
+
たとえば正規表現 `a\d$` は `a1` はマッチしますが `ab1` にはマッチしません。`\d$` が `a` に続いていないからです。
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
> 選択の後にドル記号が来ますので、記号にすると「\d$、\dd$、[01]\d\d$、2[0-4]\d$、25[0-5]$」の何れかが選ばれるはずです。
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
連続する必要があるので、「『\d$、\dd$、[01]\d\d$、2[0-4]\d$、25[0-5]$』の何れかが、直前までのパターンに全て一致するもの」を左から試行することになります。
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
`\d$` は `1` が行末と接しているのでこれ単体では確かにマッチしますが、直前までのパターンと接しているという条件に当てはまらないわけです。`111` は直前と接しており、かつ行末とも接するのでここで終了します。
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
逆に `a.*(b|bb|bbb)$` のように直前に制約がなければ `.*` が任意の一文字にマッチし続けるので直前に何がきていようと常に一番左の `b` が試行されて `bb` や `bbb` は試行されません。
|