简单的preg_replace无法正常工作

时间:2012-08-29 09:47:32

标签: php string preg-replace

我遇到麻烦让我的preg_replace工作到某个字符串。这是我原始流的示例:

“这只是验证{my | your | their} regex”的{simple | huge | fast}测试“

我想要做的是:我想将“{}”之间的部分替换为其间的一个(第一个)。例如:

“这只是验证我的正则表达式的简单测试”

基本上我目前正在做的是:

foreach ($zeilen as $key => $value) {

    preg_match_all('/\{(.*?)\}/', $value[15], $arr1);

    foreach($arr1[1] as $key2 => $arrValue){
        preg_match_all('/(.*?)\|/', $arrValue, $arr2);
    }

    preg_replace('/\{(.*?)\}/', 'test', $value[15]);

    echo '<tr>';
    echo '<td>'. $value[15] . '</td>';
    echo '</tr>';

    }

我在那里使用foreach循环,因为我想要替换完全相同的模式的不同行。我很确定有更好的方法可以做到这一点,也许有人甚至可以向我推荐一个。我的问题是,preg_replace根本不起作用。 $ value [15]与{}之间的单词完全一致。没有显示“测试”。我不是很擅长正则表达式!

非常感谢任何人的帮助!

1 个答案:

答案 0 :(得分:1)

您不会将替换值存储在任何位置。此外,如果在循环外使用替换,则可能会影响模式的所有出现。我认为这会有所帮助:

foreach ($zeilen as $key => $value) {

preg_match_all('/\{(.*?)\}/', $value[15], $arr1);

foreach($arr1[1] as $key2 => $arrValue){
    preg_match('/(.*?)\|/', $arrValue, $arr2);
    $value[15]=str_replace($arr1[0][$key2], $arr2[1], $value[15]);
}

echo '<tr>';
echo '<td>'. $value[15] . '</td>';
echo '</tr>';

}