【问题标题】:strtolower inside preg_replace - possible?preg_replace 中的 strtolower - 可能吗?
【发布时间】:2011-01-25 14:45:40
【问题描述】:

是否可以在preg_replace的替换部分使用strtolower

这不起作用:

preg_replace('/(http:\/\/)?(www\.)?([a-zA-Z0-9\-_\.]+\.(com|co\.uk|org|tv|biz)(\/[a-zA-Z0-9\-\._\?&=#\+;]+)*)/i', '<a href="http://www.'.strtolower('$3').'" target="_blank">'.strtolower('$3').'</a>', $d);

【问题讨论】:

    标签: php


    【解决方案1】:

    有可能,是的。看看e 修饰符(Example #4):

    preg_replace('/(http:\/\/)?(www\.)?([a-zA-Z0-9\-_\.]+\.(com|co\.uk|org|tv|biz)(\/[a-zA-Z0-9\-\._\?&=#\+;]+)*)/ie', "'<a href=\"http://www.'.strtolower('$3').'\" target=\"_blank\">'.strtolower('$3').'</a>'", $d);
    

    (未经测试,转义反斜杠的个数可能有误。)

    【讨论】:

    • 非常感谢 jensgram!除了你只需要转义 " 一次(单反斜杠)之外,别无所求。很好!
    【解决方案2】:

    我更喜欢使用 preg_replace_callback() 而不是使用 e(eval) 修饰符。我觉得代码更干净,出错的空间更小。

    【讨论】:

    • +1 我很想同意你的看法。唯一的问题是 PHP 中匿名函数的语法不是很干净,IMO :)
    • 是的,create_function() 很丑。但是在 php 5.3+ 中,匿名函数非常好。 php.net/manual/en/functions.anonymous.php
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 2014-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    相关资源
    最近更新 更多