質問するログイン新規登録

回答編集履歴

3

追記

2019/01/13 13:49

投稿

LouiS0616
LouiS0616

スコア35680

answer CHANGED
@@ -7,4 +7,11 @@
7
7
  - `>`以外の任意の文字を (`[^>]`)
8
8
  - 0回以上、できるだけ短くマッチ (`*?`)
9
9
 
10
- `*?`や`+?`は**最短一致**だとか**最左最短一致**だとか呼ばれるものです。
10
+ `*?`や`+?`は**最短マッチ**だとか**最左最短マッチ**だとか**非貪欲マッチ**だとか呼ばれるものです。
11
+ Pythonのドキュメントには次のようにあります。
12
+ > #####*?, +?, ??
13
+ '*' 、 '+' 、 '?' といった修飾子は、すべて 貪欲 (greedy) マッチ、すなわちできるだけ多くのテキストにマッチするようになっています。時にはこの動作が望ましくない場合もあります。例えば正規表現 <.*> を '<a> b <c>' にマッチさせると、 '<a>' だけにマッチするのではなく全文字列にマッチしてしまいます。 ? を修飾子の後に追加すると、 非貪欲 (non-greedy) あるいは 最小一致 (minimal) のマッチになり、できるだけ 少ない 文字数のマッチになります。例えば正規表現 <.*?> を使うと '<a>' だけにマッチします。
14
+
15
+ 引用元: [Python 標準ライブラリ » re — 正規表現操作](https://docs.python.jp/3/library/re.html)
16
+
17
+ 同じような例が挙げられていますね。

2

誤字

2019/01/13 13:49

投稿

LouiS0616
LouiS0616

スコア35680

answer CHANGED
@@ -7,4 +7,4 @@
7
7
  - `>`以外の任意の文字を (`[^>]`)
8
8
  - 0回以上、できるだけ短くマッチ (`*?`)
9
9
 
10
- `*?`や`+?`は**最短一致**だとか**左最短一致**だとか呼ばれるものです。
10
+ `*?`や`+?`は**最短一致**だとか**左最短一致**だとか呼ばれるものです。

1

リンクの変更

2019/01/13 13:46

投稿

LouiS0616
LouiS0616

スコア35680

answer CHANGED
@@ -1,8 +1,10 @@
1
1
  正規表現を図示できるサイトがあります。
2
2
  ![実際の画面](923edc29860255918e54d0099d35c56c.png)
3
- [Debuggex](https://www.debuggex.com/)
3
+ [Debuggex](https://www.debuggex.com/r/FJ5BhMbCFvDN5xQe)
4
4
 
5
5
  ---
6
6
  実際ややこしいのは `[^>]*?` の部分だけで、これは次のように読みます。
7
7
  - `>`以外の任意の文字を (`[^>]`)
8
- - 0回以上、できるだけ短くマッチ (`*?`)
8
+ - 0回以上、できるだけ短くマッチ (`*?`)
9
+
10
+ `*?`や`+?`は**最短一致**だとか**再左最短一致**だとか呼ばれるものです。