0

私は PHP の初心者で、フォーラムで次の PHP 式を見ました。

私の PHP バージョンは 5.2.X () です

$regex = <<<'END'
/
  ( [\x00-\x7F]                 # single-byte sequences   0xxxxxxx
  | [\xC0-\xDF][\x80-\xBF]      # double-byte sequences   110xxxxx 10xxxxxx
  | [\xE0-\xEF][\x80-\xBF]{2}   # triple-byte sequences   1110xxxx 10xxxxxx * 2
  | [\xF0-\xF7][\x80-\xBF]{3}   # quadruple-byte sequence 11110xxx 10xxxxxx * 3 
  )
| ( [\x80-\xBF] )               # invalid byte in range 10000000 - 10111111
| ( [\xC0-\xFF] )               # invalid byte in range 11000000 - 11111111
/x
END;

このコードは正しいですか? <<<、 、 、 、 'END'、 、/、 、などの (私にとっては) 奇妙な構造は何/xEND;意味するのでしょうか?

私の PHP バージョンは nowdoc をサポートしていません。この式をどのように置き換えればよいですか? 引用符なしで'END'$regex になりましたNULL

私は受け取る:

解析エラー: 構文エラー、/home/vhosts/mysite.com/public_html/mypage.php 行 X の予期しない T_SL

ありがとう

4

4 に答える 4

6

解析エラー: 構文エラー、/home/vhosts/mysite.com/public_html/mypage.php 行 X の予期しない T_SL

これは END のあたりに由来します。これは、PHP 5.3 で追加された nowdoc と呼ばれます。PHP 5.2 を使用しており、この正規表現は '\x' を使用しているため、引用符で囲まれた文字列が必要になるか、'\' をエスケープする必要があります。

この回答で使用されている、引用符で囲まれた文字列としての正規表現の例:

$regex = '/
( [\x00-\x7F]                 # single-byte sequences   0xxxxxxx
  | [\xC0-\xDF][\x80-\xBF]      # double-byte sequences   110xxxxx 10xxxxxx
  | [\xE0-\xEF][\x80-\xBF]{2}   # triple-byte sequences   1110xxxx 10xxxxxx * 2
  | [\xF0-\xF7][\x80-\xBF]{3}   # quadruple-byte sequence 11110xxx 10xxxxxx * 3
  )
| ( [\x80-\xBF] )               # invalid byte in range 10000000 - 10111111
| ( [\xC0-\xFF] )               # invalid byte in range 11000000 - 11111111
/x
';

「/」と「/x」の部分は、正規表現の制御文字です。「/」は開始と終了を示し、x フラグ (PCRE_EXTENDED) の意味は以下で定義されています: http://us.php.net/manual/en/reference.pcre.pattern.modifiers.php

于 2010-04-08T23:19:58.533 に答える
5

<<<ヒアドキュメント構文END呼ばれ、大量のデータを変数に引用する方法です。

$mytext = <<<TXT

this is my text and it
can be many lines
etc
etc

TXT;

3 つの文字 (この例では TXT、END) は、私が知る限り、英数字でなければなりませんが、好きなものにすることができます。

詳しくはマニュアルで

于 2010-04-08T22:28:02.713 に答える
3

ヒアドキュメント構文です。

<<< 'END'、それが文字列の始まりであり、次に "END" が出現するまでのすべてが文字列の一部である (改行も含む) ことを示しています。

/とは/x、実際には正規表現の一部です。

于 2010-04-08T22:27:44.867 に答える
2

他のユーザーがヒアドキュメント構文 (通常、多くのエスケープが必要な大きな文字列に使用される) であると述べていることに加えて、コードは区切り記号として「/」を使用して正規表現を定義しています。

最後の「/x」は正規表現を閉じ、正規表現エンジンに「フリースペースモード」で実行するように指示します。他の可能なオプションは、大文字と小文字を区別しない /i または複数行モードの /m です。

PHP の正規表現エンジンの詳細については、次を参照してください。

PHP での正規表現の使用

于 2010-04-08T22:31:30.303 に答える