<
と>
は正規表現のメタ文字として扱われます。
正規表現のメタ文字は (バックスラッシュ)と後ろに . \ + * ? [ ^ ] $ ( ) { } = ! < > | : - をつけてエスケープしないといけません。
ですので、以下のような関数を作っておきましょう。
php
1function regex_escape($string)
2{
3 $string = preg_replace('/(.)/', '\\$1', $string);
4 $string = preg_replace('/(\\)/', '\\\1', $string);
5 $string = preg_replace('/(+)/', '\\$1', $string);
6 $string = preg_replace('/(?)/', '\\$1', $string);
7 $string = preg_replace('/([)/', '\\$1', $string);
8 $string = preg_replace('/(^)/', '\\$1', $string);
9 $string = preg_replace('/(])/', '\\$1', $string);
10 $string = preg_replace('/($)/', '\\$1', $string);
11 $string = preg_replace('/(()/', '\\$1', $string);
12 $string = preg_replace('/())/', '\\$1', $string);
13 $string = preg_replace('/(\{)/', '\\$1', $string);
14 $string = preg_replace('/(\})/', '\\$1', $string);
15 $string = preg_replace('/(\=)/', '\\$1', $string);
16 $string = preg_replace('/(\!)/', '\\$1', $string);
17 $string = preg_replace('/(\<)/', '\\$1', $string);
18 $string = preg_replace('/(\>)/', '\\$1', $string);
19 $string = preg_replace('/(\|)/', '\\$1', $string);
20 $string = preg_replace('/(\:)/', '\\$1', $string);
21 $string = preg_replace('/(\-)/', '\\$1', $string);
22 return $string;
23}
この関数は PHPの標準関数の preg_quoteよりも自動的に \を付けた文字列を返すので
$pattern = '/(' regex_escape('<script>') . ')/';
とすれば
preg_match/preg_match_all/preg_replace/preg_splitの 第1引数として渡せます。
regex_escape関数は PHP7.1.10で動作確認済みです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/12 06:24
2017/08/12 06:26
2017/08/12 06:28