1

我正在尝试使用正则表达式在我的应用程序路径中查找“系统”文件夹,并将其替换为“计数器”。但我的正则表达式模式对我不满意。代表我的应用程序路径的字符串称为 $counterslocation,它看起来像这样:

“/var/www/myapp/系统”

最终,我想结束这个:

/var/www/myapp/counters

首先,我使用 preg_match 来确保我的模式是正确的。然后我会尝试 preg_replace。我有以下正则表达式代码:

    $pattern='/(\/[0-9a-z]\/)*(myapp\/)(system)/i'; 

    if (preg_match($pattern,$counterslocation,$matches))  {
       var_dump($matches);
    }

var_dump() 调用返回以下输出:

数组(4) { [0]=> 字符串(10) "myapp/system" [1]=> 字符串(0) "" [2]=> 字符串(4) "myapp/" [3]=> 字符串( 6)“系统”

我的问题是,如何让正则表达式也返回导致字符串“myapp”部分的所有内容?我想通过把它放在括号中,它会将它作为第一组捕获......但看起来我做错了什么。

谢谢。

4

2 回答 2

2

您没有量化目录名称,因此它与单个字母数字字符匹配的目录。你需要:

/(\/[0-9a-z]+\/)*(myapp\/)(system)/
            ^
于 2013-01-14T16:41:46.713 回答
0

在要提取的部分周围添加 () ,理想情况下还使用不同的分隔符,这样您就不必转义斜杠:

%((/([0-9a-z]+/)*)(myapp/))(system)%
于 2013-01-14T16:44:21.843 回答