正则表达式的错误 - 分组问题?

时间:2013-01-14 16:39:08

标签: php regex

我正在尝试使用正则表达式在我的应用程序路径中找到“system”文件夹,并将其替换为“counter”。 但我的正则表达方式对我不满意。 我的代表我的应用程序路径的字符串称为$ counterlocation,它看起来像这样:

  

“/无功/网络/ MyApp的/系统”

最终,我想以此结束:

  

的/ var / WWW / MyApp的/计数器

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

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

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

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

  

array(4){[0] => string(10)“myapp / system”[1] => string(0)“”[2] =>   string(4)“myapp /”[3] => string(6)“system”

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

感谢。

2 个答案:

答案 0 :(得分:2)

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

/(\/[0-9a-z]+\/)*(myapp\/)(system)/
            ^

答案 1 :(得分:0)

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

%((/([0-9a-z]+/)*)(myapp/))(system)%