回答編集履歴

3

* 修正

2017/10/31 07:11

投稿

chitoku
chitoku

スコア1610

test CHANGED
@@ -22,4 +22,4 @@
22
22
 
23
23
 
24
24
 
25
- 逆に `a.*(b|bb|bbb)$` のように直前に制約がなければ `.*` が任意の文字にマッチし続けるので直前に何がきていようと常に一番左の `b` が試行されて `bb` や `bbb` は試行されません。
25
+ 逆に `a.*(b|bb|bbb)$` のように直前に制約がなければ `.*` が `b` の直前にある任意のゼロ文字以上にマッチし続けるので直前に何がきていようと常に一番左の `b` が試行されて `bb` や `bbb` は試行されません。

2

修正

2017/10/31 07:11

投稿

chitoku
chitoku

スコア1610

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

詳細を追加

2017/10/30 15:16

投稿

chitoku
chitoku

スコア1610

test CHANGED
@@ -1,11 +1,25 @@
1
- `\d$` 単独の場合は `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` は試行されません。