需要帮助ereg_replace(不建议使用)

时间:2013-08-24 23:03:30

标签: preg-replace ereg-replace

你好我2年或3年前写了几个脚本。现在它没有运行。 我的脚本:

<?php
 function tolink($text){

    $text = " ".$text;
    $text = ereg_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)',
            '<a href="\\1" target="_blank" rel="nofollow">\\1</a>', $text);
    $text = ereg_replace('(((f|ht){1}tps://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)',
            '<a href="\\1" target="_blank" rel="nofollow">\\1</a>', $text);
    $text = ereg_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)',
    '\\1<a href="http://\\2" target="_blank" rel="nofollow">\\2</a>', $text);
    $text = ereg_replace('([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,4})',
    '<a href="mailto:\\1"  rel="nofollow">\\1</a>', $text);
    return $text;
    }

    ?>

当我用preg_replace替换ereg_replace时,它会给我一个错误。

我需要你的帮助......谢谢...

1 个答案:

答案 0 :(得分:0)

PHP中的所有PCRE函数都要求您使用一对分隔符(例如,分隔符号)来包围正则表达式。此示例中正则表达式周围的/

preg_replace ('/regexp_to_match/', 'replacement', $text);

这允许您在第二个分隔符之后将修饰符附加到正则表达式,如:

preg_replace ('#regexp_to_match#i', 'replacement', $text);

执行不区分大小写的匹配。

从这两个例子中可以看出,分隔符可以是任何字符。将正则表达式的第一个字符作为分隔符,然后在结尾处查找其匹配项。如果角色是包围角色,则会查找其相反的角色,例如

preg_match ('<x*>', $text);

以下是您第一次替换的preg_replace()版本。

  $text = preg_replace('<(((f|ht){1}tp://)[-\w@:%+.~#?&/=]+)>',
        '<a href="$1" target="_blank" rel="nofollow">$1</a>', $text);

我还简化了正则表达式:我使用\w代替单词字符,而不是明确列出字母数字,删除了\+之前的不必要的[...],并在括号内更改///(额外的斜杠是多余的)。此外,$1最近更换为\\1,而不是{{1}}。