1

この単純なテキスタイル マークアップを使用すると、テキスタイル クラスでコンパイル エラーが発生するようです。リンクで発生するようです:

"linktext":http://www.nu.nl
["linktext":http://www.nu.nl]

コンパイル エラー:

Warning: preg_match() [function.preg-match]: Compilation failed: unrecognized character after (?< at offset 5 in /var/www/vhosts/sturb.nl/subdomains/bu/httpdocs/lib/textile.php on line 1355

他のすべてのマークアップは通常どおり表示されます。

ところで: 私はnetcarver のテキスタイル php クラスを使用しています。

編集:これは、エラーがトリガーされる機能です。1355行目は$ok = preg_match( $r, $uri, $m );

function parseURI( $uri, &$m )
{
    $r = "@^((?<scheme>[^:/?#]+):)?(//(?<authority>[^/?#]*))?(?<path>[^?#]*)(\?(?<query>[^#]*))?(#(?<fragment>.*))?@";
    #       12                     3  4                      5              6  7                8 9
    #
    #   scheme    = $2
    #   authority = $4
    #   path      = $5
    #   query     = $7
    #   fragment  = $9

    $ok = preg_match( $r, $uri, $m );
    return $ok;
}
4

1 に答える 1

0

正規表現 (文字クラスにないもの) の「#」記号に問題がある可能性があります。通常はエスケープする必要があります。

アップデート

明らかに、php では、//x 修飾子が指定されていない限り、# はリテラルとして扱われます。次に、リテラルとして使用する場合はエスケープする必要があります。

表示されるエラーは、使用されている PHP のバージョンが「名前付きキャプチャ バッファ」をサポートしていないことを意味します。どのバージョンのphpがそれを実装しているかはわかりません。

あなたが名前を付けたテキストファイルphpクラスを見ましたが、その機能は実際にあります。彼らがあなたにphpを提供するのか、それとも独自のものを使用しているのかわかりません。私はphpの専門家ではありません。

テスト ケースを実行するためにideone.comで使用した PHP のバージョンは5.2.11で、名前付きキャプチャ バッファをサポートしています。

1 つの方法は、名前付き構成を から(?<name> -- )に変換できることです( -- )。それが実行されるか、少なくともそのサブ式を通過する必要があります。

これは、名前付きキャプチャ バッファを使用する場合と使用しない場合のテスト ケースですhttp://ideone.com/dm4Q8
使用されているバージョンを調べてみてください。「version()」関数が組み込まれている可能性があります。

テスト用の拡張/縮小正規表現を次に示します。

'~
^(
   ([^:/?#]+)
   :
 )?
 (
   //
   ([^/?#]*)
 )?
 ([^?#]*)
 (
   \?
   ([^#]*)
 )?
 (
   \#
   (.*)
 )?
 ~x';

'~^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?~'
于 2012-04-16T18:03:03.867 に答える