在使用这个简单的textile标记时,textile类似乎给出了一个编译错误。这似乎发生在链接上:
"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's的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;
}发布于 2012-04-17 02:03:04
正则表达式中的“#”符号可能有问题(不在字符类中的那个)。它们必须正常地进行转义。
更新
显然,在php中,#被视为文字,除非指定了//x修饰符。如果将其用作文字,则必须对其进行转义。
您收到的错误表示所使用的PHP版本不支持“命名捕获缓冲区”。我不确定哪个版本的php实现了这一点。
我查看了您命名的文本文件php类,该函数确实存在。我不知道他们是为你提供php,还是你在使用自己的php。我不是php专家。
在ideone.com上用来运行我的测试用例的PHP版本是5.2.11,它支持命名捕获缓冲区。
一种方法是,您可以将命名结构从(?<name> -- )转换为( -- )。这应该会运行,或者至少让您通过该子表达式。
下面是一个带有/不带有命名捕获缓冲区http://ideone.com/dm4Q8的测试用例
尝试找出正在使用的版本,也许它有一个内置的' version ()‘函数。
下面是一个扩展/收缩的正则表达式进行测试。
'~
^(
([^:/?#]+)
:
)?
(
//
([^/?#]*)
)?
([^?#]*)
(
\?
([^#]*)
)?
(
\#
(.*)
)?
~x';
'~^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?~'https://stackoverflow.com/questions/10175643
复制相似问题