回答編集履歴
4
\\\\\\n\.\*\?
test
CHANGED
@@ -1,4 +1,12 @@
|
|
1
|
+
### バックトラック
|
2
|
+
|
3
|
+
|
4
|
+
|
1
5
|
`(\\\n.*?)*` は最長一致ですが、`.*?` は最短一致であり、`(\\\n.*?)*` がどれだけ長い文字列にマッチしようとも、**バックトラック**によって最も短い文字列になるまで切り詰められます。
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
### オプションの定義
|
2
10
|
|
3
11
|
|
4
12
|
|
@@ -8,7 +16,7 @@
|
|
8
16
|
|
9
17
|
概ね、その通りだと思います。
|
10
18
|
|
11
|
-
`*` は「0回以上の繰り返し」なので、
|
19
|
+
`*` は「0回以上の繰り返し」なので、「空文字として評価できる(あってもなくても良い)」という意味で「オプション」です。
|
12
20
|
|
13
21
|
ただし、`\\\n.*?` に関しては `\\\n.` が0文字に切り詰められないのでオプションとは呼べません。
|
14
22
|
|
3
\\\\\\n\.\*\?
test
CHANGED
@@ -6,9 +6,13 @@
|
|
6
6
|
|
7
7
|
|
8
8
|
|
9
|
-
|
9
|
+
概ね、その通りだと思います。
|
10
10
|
|
11
|
-
`*` は「0回以上の繰り返し」なので、あってもなくても良いという意味で「オプション」です。
|
11
|
+
`*` は「0回以上の繰り返し」なので、あってもなくても良い(空文字として評価できる)という意味で「オプション」です。
|
12
|
+
|
13
|
+
ただし、`\\\n.*?` に関しては `\\\n.` が0文字に切り詰められないのでオプションとは呼べません。
|
14
|
+
|
15
|
+
その一つ外側で `()*` が存在するので、そこで空文字として評価され、「オプション」となります。
|
12
16
|
|
13
17
|
|
14
18
|
|
2
オプションというのは
test
CHANGED
@@ -2,4 +2,14 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
+
> 等号より後ろの部分がオプションというのは、正規表現の等号のあとにある三つの*のことを言っているのでしょうか。
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
はい。その通りだと思います。
|
10
|
+
|
11
|
+
`*` は「0回以上の繰り返し」なので、あってもなくても良いという意味で「オプション」です。
|
12
|
+
|
13
|
+
|
14
|
+
|
5
15
|
Re: aaaaaaaa さん
|
1
バックトラック
test
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
`(\\\n.*?)*` は最長一致ですが、`.*?` は最短一致であり、
|
1
|
+
`(\\\n.*?)*` は最長一致ですが、`.*?` は最短一致であり、`(\\\n.*?)*` がどれだけ長い文字列にマッチしようとも、**バックトラック**によって最も短い文字列になるまで切り詰められます。
|
2
|
-
|
3
|
-
以前、話題に上がった**バックトラック**を思い出せば、理解できそうな気がしますが、いかがでしょうか。
|
4
2
|
|
5
3
|
|
6
4
|
|