2012-10-07 57 views
1

所以我有这样的评论 - 像我正在工作的系统,似乎我没有想到它的所有方式,但我被阻止进入我的方法在这一点上暂时和可预见的未来。这就是说。PHP preg_match或_replace从字符串查找子字符串,同时保留匹配

我目前使用

$pattern = '/\[@(\w+):(.*)\]/'; 
$subject = '[@keyword:string]'; 
preg_match($pattern, $subject, $matches); 

要找到一个特定的模式类型的特定信息。这是在[@keyword:string]的范围内,这很好。然而,在我的搜索中想出这样做的方法时,我没有看到我使用的字符串还包含其他内容,比如注释。所以整个字符串看起来像'[@keyword:string]
Hello World`

上面的代码会为我转储一个数组,第一个项目是我正在寻找的实际匹配,第二个是关键字和下一个字符串。这很棒,因为我用它来做其他事情。然而。就像我说的那样,我从来没有为<br>Hello World part补偿过。我需要做的是与上述非常类似的东西。但只留下<br>Hello World部分作为可重用字符串,因为我打算重新加入2个字符串。我的过程完成后。除此之外,在这种情况下完成的过程正在用匹配的用户名替换我正在寻找的模式,或者基于关键字的图像,然后调用函数来查找正确的名称,或者为图片。哪一个很好,我得到了那部分,它只是从字符串中删除模式,所以当我得到名称或图像后,我可以重新加入到字符串中。

那么希望这是有道理的。

+0

只有一次会发生串,为什么不喜欢'$模式=“里面你需要的图案/(.* ?)\ [@(\ W +):([^ \]]。*)\](*)/';' – air4x

回答

0

使用以下模式的一个:

'/\[@(\w+):(.*?)\]/' 

'/\[@(\w+):(.*)\]/U' 

注:PCRE_UNGREEDY