是否可以使用£作为preg_replace中的分隔符?

我正在将我发现的eregi_replace函数转换为preg_replace,但是eregi字符串包含了键盘上的每个字符。所以我尝试使用£作为分隔符..它目前正在工作,但我想知道它是否可能导致问题,因为它是一个非标准字符? 这是eregi:
function makeLinks($text) {  
$text = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_+.~#?&//=]+)',
'<a href="\1">\1</a>', $text);
$text = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_+.~#?&//=]+)',
'\1<a href="http://\2">\2</a>', $text);

    return $text;}
和preg:
function makeLinks($text) {
    $text = preg_replace('£(((f|ht){1}tp://)[-a-zA-^Z0-9@:%_+.~#?&//=]+)£i',
    '<a href="\1">\1</a>', $text);
    $text = preg_replace('£([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_+.~#?&//=]+)£i',
    '\1<a href="http://\2">\2</a>', $text);

        return $text;
}
    
已邀请:
£
有问题,因为它不是ASCII字符。它来自Latin-1字符集,只有在PHP脚本也使用8位表示时才会起作用。如果您的文件编码为UTF-8,则
£
将表示为两个字节。 PHP中的PCRE将超越它。 (至少我的版本。)     
您可以使用括号来分隔正则表达式而不是单个字符,例如:
preg_replace('(abc/def#ghi)i', ...);
这可能比试图找到一个不是(还)部分表达的晦涩角色更好。     
你可以使用unicode字符,只是为了确定。
u00A3
注意ereg功能和unicode支持。 http://www.regular-expressions.info/php.html http://www.regular-expressions.info/characters.html 女王万岁。     
正如@Chris指出的那样,您可以使用成对的括号字符作为分隔符,但它们必须在整个正则表达式中正确平衡。例如,
'<<>'
不起作用,但
'<<>>'
会起作用。你可以使用
()
[]
{}
<>
中的任何一种,但我推荐使用大括号或方括号;括号在正则表达式中过于常见,并且尖括号用于转义序列,如
(?>...)
(原子组)和
(?<=...)
(lookbehind)。 但是我在这个问题上和@Brad一起:为什么不在正则表达式出现时只用反斜杠转义分隔符?     
您会比我们更了解正在解析的数据。就正则表达式而言,它与任何其他ASCII值没有什么不同。 虽然我不得不问:传统然后逃避它有什么问题?或者使用具有字符范围的类?     

要回复问题请先登录注册