Php 纺织品错误:使用url';s导致编译错误

Php 纺织品错误:使用url';s导致编译错误,php,regex,textile,Php,Regex,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/

当使用这个简单的纺织物标记时,纺织物类似乎给出了一个编译错误。这似乎发生在以下链接中:

"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

正则表达式中的“#”符号(不在字符类中的符号)可能有问题。他们必须正常逃脱

更新

另外,在php中,除非指定了//x修饰符,否则#被视为一个文本。如果用作文本,则必须对其进行转义

您得到的错误意味着所使用的PHP版本不支持“命名捕获缓冲区”。我不确定php的哪个版本实现了这一点

我查看了您命名的textfile php类,该函数确实存在。我不知道他们是否为您提供php,或者您正在使用自己的php。我不是php专家

在ideone.com上运行我的测试用例使用的PHP版本是5.2.11,它支持命名捕获缓冲区

一种方法是,您可以将命名的构造从
(?-)
转换为
(-)
。它应该运行,或者至少让您通过该子表达式

下面是一个有/没有命名捕获缓冲区的测试用例
尝试找出正在使用的版本,可能它有一个内置的“version()”函数

这里是一个扩展/收缩的正则表达式,用于测试

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

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

我添加了preg_match函数,它会触发错误,这似乎是另一个问题;扩展的正则表达式不起作用。。。它说:
在(
@stUrb中的偏移量73处)之后的未识别字符-我更新了我的答案以包含一个没有命名捕获缓冲区的正则表达式。如果它起作用,你应该更新PHP的版本。大体上,
(?
是一个正则表达式转义序列分组。下一个字符过去的
确定它是什么。因此不识别“(?
)”,这意味着不支持命名捕获缓冲区。
'~
^(
   ([^:/?#]+)
   :
 )?
 (
   //
   ([^/?#]*)
 )?
 ([^?#]*)
 (
   \?
   ([^#]*)
 )?
 (
   \#
   (.*)
 )?
 ~x';

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