首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Textile错误:使用url的结果导致编译错误

Textile错误:使用url的结果导致编译错误
EN

Stack Overflow用户
提问于 2012-04-16 22:03:11
回答 1查看 248关注 0票数 1

在使用这个简单的textile标记时,textile类似乎给出了一个编译错误。这似乎发生在链接上:

代码语言:javascript
复制
"linktext":http://www.nu.nl
["linktext":http://www.nu.nl]

编译错误:

代码语言:javascript
复制
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 );

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

发布于 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 ()‘函数。

下面是一个扩展/收缩的正则表达式进行测试。

代码语言:javascript
复制
'~
^(
   ([^:/?#]+)
   :
 )?
 (
   //
   ([^/?#]*)
 )?
 ([^?#]*)
 (
   \?
   ([^#]*)
 )?
 (
   \#
   (.*)
 )?
 ~x';

'~^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?~'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10175643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档