回答編集履歴

2

微修正

2017/03/23 05:25

投稿

ikedas
ikedas

スコア4317

test CHANGED
@@ -3,7 +3,7 @@
3
3
  - 文字列:
4
4
  `Pあめんぼ QあおいなQ あいうえお`
5
5
  - 正規表現:
6
- `P((?![PQ]).)*Q`
6
+ `P((?!P|Q).)*Q`
7
7
 
8
8
  次のことに注意して下さい。
9
9
  (1) 量指定子は、自身が量化している部分表現がどんなものかは知らない。ただ、その部分表現によるマッチを指定の回数だけ成功させようとするだけである。
@@ -12,7 +12,7 @@
12
12
 
13
13
  ご質問の「2番目の例の処理の場合」は、前者がおおむね正しいです。以下、説明します。
14
14
 
15
- まず注意の (1) により、量指定子は自が量化している部分表現の詳細を知りませんから、`(?![PQ]).`という部分表現を仮に`R`で表せば
15
+ まず注意の (1) により、量指定子は自が量化している部分表現の詳細を知りませんから、`(?!P|Q).`という部分表現を仮に`R`で表せば
16
16
  `P₁R*Q`
17
17
  と表すことができます (「₁」は状態の保存がされ得る場所を示します)。
18
18
 

1

微加筆

2017/03/23 05:25

投稿

ikedas
ikedas

スコア4317

test CHANGED
@@ -8,6 +8,7 @@
8
8
  次のことに注意して下さい。
9
9
  (1) 量指定子は、自身が量化している部分表現がどんなものかは知らない。ただ、その部分表現によるマッチを指定の回数だけ成功させようとするだけである。
10
10
  (2) 正規表現エンジンは、連接する部分表現がマッチするかどうかを順番に試していくが、次にどんな部分表現が後続するかは知らないし、マッチさせている文字列に次にどんな文字が出現するかも知らない。
11
+ (次の部分表現が先読み表現だった場合も、その部分表現によるマッチを実際に試行するときにはじめて、次に出現する文字を調べます。)
11
12
 
12
13
  ご質問の「2番目の例の処理の場合」は、前者がおおむね正しいです。以下、説明します。
13
14