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

回答編集履歴

3

a

2016/03/31 19:55

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -1,10 +1,10 @@
1
1
  これが一番シンプルですね.マッチした部分を空文字列に置換するだけです.
2
2
 
3
3
  ```php
4
- $title = preg_replace('/(?:このような内容です。|上記となっています。).*+/s', '', $title);
4
+ $title = preg_replace('/(?:このような内容です。|上記となっています。).*/s', '', $title);
5
5
  ```
6
6
 
7
- - 後ろが`.*+` `.*`のいずれかであれば,前で`^(.*?)`をマッチングさせる必要はないです.
7
+ - 後ろが`.*` `.+` `.*+` `.++`のいずれかであれば,前で`^(.*?)` `^(.+?)`をマッチングさせる必要はないです.
8
8
  - `.`を任意の1バイトにマッチさせたい場合`s`修飾子は必須なので付け忘れずに.
9
9
 
10
10
 

2

a

2016/03/31 19:55

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -4,7 +4,7 @@
4
4
  $title = preg_replace('/(?:このような内容です。|上記となっています。).*+/s', '', $title);
5
5
  ```
6
6
 
7
- - 後ろが`.*+` `.*`のいずれかであれば,前で`^(.*?)`をマッチングさせる必要はないです.**こいつらは必ず末尾まで全部オフセットを食いつぶしてくれます.**
7
+ - 後ろが`.*+` `.*`のいずれかであれば,前で`^(.*?)`をマッチングさせる必要はないです.
8
8
  - `.`を任意の1バイトにマッチさせたい場合`s`修飾子は必須なので付け忘れずに.
9
9
 
10
10
 

1

a

2016/03/31 19:44

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -4,4 +4,10 @@
4
4
  $title = preg_replace('/(?:このような内容です。|上記となっています。).*+/s', '', $title);
5
5
  ```
6
6
 
7
- 後ろ`.*?`ではなく**`.*+``.*`**にしておけば,前で`^(.*?)`をマッチングさせる必要はないです.必ずこいつらは末尾まで全部オフセットを食いつぶしてくれます..あと`.`を任意の1バイトにマッチさせたい場合`s`修飾子は必須なので付け忘れずに.
7
+ - 後ろ`.*+` `.*`のいずれかであれば,前で`^(.*?)`をマッチングさせる必要はないです.**こいつらは必ず末尾まで全部オフセットを食いつぶしてくれます.**
8
+ - `.`を任意の1バイトにマッチさせたい場合`s`修飾子は必須なので付け忘れずに.
9
+
10
+
11
+ 【蛇足】
12
+
13
+ 何千回もループしないかぎりほとんど差はでませんが,`.*?` `.+?` は**1オフセットごとに後ろをチェックする**ため速度低下を招きます.出来るだけ使用は控えめに.また今回は大丈夫ですが,バックトラックが発生するケースでは`.*` `.+`も同様です.バックトラックがどうしても動作上必要な場合はしょうがないですが,不必要な場合は `.*+` `.++` にして抑制をしておくと動作速度が向上することがあります.