Bazı belirsiz PHP sözdizimi

4 Cevap php

Ben bir PHP acemi ve forumda bu PHP ifadesini gördüm:

Benim PHP version 5.2.x olan ()

$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;

Bu kod doğru mudur? Ne bu garip gibi yapıların (benim için) <<<, 'END', /, /x, ve END; Yani?

Benim PHP version yorumsuz metin desteklemiyor, nasıl bu ifadeyi değiştirmek gerekir? tırnak işaretleri olmadan 'END' $ regex oldu NULL

Ben alma:

Parse error: syntax error, unexpected T_SL in /home/vhosts/mysite.com/public_html/mypage.php on line X

Teşekkürler

4 Cevap

Parse error: syntax error, unexpected T_SL in /home/vhosts/mysite.com/public_html/mypage.php on line X

Bu END etrafında 's geliyor. Bu PHP 5.3 eklendi yorumsuz metin denir. PHP 5.2 kullanıyorsanız, ve bu regex '\ x' kullandığından, bir alıntı dize gerekir ya da '\' s kaçmak gerekir.

Kullanılan bir alıntı dize, gibi regex örneği this answer:

$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
';

"/" Ve "/ x" bölümleri regex kontrol karakterleridir. "/" Nin başlangıcını ve sonunu işaretlemek ve x bayrağı (PCRE_EXTENDED) anlamı tanımlanır: http://us.php.net/manual/en/reference.pcre.pattern.modifiers.php

<<< ve END adlandırılır heredoc syntax - bir değişken veri büyük miktarda alıntı bir yol.

$mytext = <<<TXT

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

TXT;

Üç karakter (sizin örnekte burada TXT, END) onlar kadar ben farkında değilim gibi alfanümerik olması gerekir, ancak böyle her ne olabilir.

the manual daha fazla oku

It heredoc syntax.

<<< 'END' "END" bir sonraki görünümü dize (hatta newlines) bir parçası olacak kadar bir dize başlangıç ​​ve her şeyin olduğunu söylüyor.

/ ve /x aslında düzenli ifade parçasıdır.

Diğer kullanıcılar (tipik aksi kaçan bir sürü gerektirecek büyük dizeleri için kullanılır) heredoc sözdizimi olma konusunda ne dedi ek olarak, kod deliminator olarak "/" kullanarak bir düzenli ifadeyi tanımlar.

"/ x" sonunda düzenli ifadeyi kapanış ve ardından "serbest-spacing" modunda çalıştırmak için regex motoru anlatıyor. Diğer olası seçenekler olurdu / i harf duyarsız ya da multi-line modu için / m için.

Burada PHP'nin regex motoru hakkında daha fazla bilgi edinebilirsiniz:

Using Regular Expressions in PHP