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