1

我是正则表达式的新手,我一直在尝试将它与 url 一起使用,但我无法让它工作。

我有一个字符串是:

/插件/插件/插件/插件/插件/插件/

我想将所有字母替换为字符串“{char}”,以便字符串最终成为:

/{char}/{char}/{char}/{char}/{char}/{char}/

我试过这个:

<?php
    $pattern        = '#(/)([a-z\_]+)(/)#'; 
    $replacement    = '$1{char}$3'; 
    $string         = '/plugins/plugins/plugins/plugins/plugins/plugins/';

    echo preg_replace($pattern, $replacement, $string);
?>

但是这段代码导致了这个:

/{char}/plugins/{char}/plugins/{char}/plugins/

我究竟做错了什么?

4

1 回答 1

3

问题是您的正则表达式匹配/plugins/- 在前面和结尾都匹配斜线。每个字母仅由正则表达式匹配一次,因此如果斜线在一个单词的末尾匹配,它也不能算作另一个单词的开头。因此,它只匹配每个其他的。

试试这个:

<?php
    $pattern        = '#(/)([a-z\_]+)(?=/)#'; 
    $replacement    = '$1{char}'; 
    $string         = '/plugins/plugins/plugins/plugins/plugins/plugins/';

    echo preg_replace($pattern, $replacement, $string);
?>

它通过使用前瞻来工作,而不是实际匹配最终的斜杠(并“消耗”它)它只是检查以确保它在那里。

于 2012-08-25T16:17:02.037 回答