3

我正在尝试执行以下操作,希望周围有 reg_ex 专家来阐明。我需要在我的代码中替换字符 [ 并将其设为 {。但是在某些情况下 [ 需要保持 [ 而不是改变。所以我认为我需要使用

preg_replace("[", "{", $string);

使用合适的正则表达式的函数将导致 [ 前面没有使用转义字符的字符让我们说。那么我怎样才能替换这个“[”而不是这个“[”?

非常感谢提前

4

2 回答 2

4

你可以做到这一点,它的约定称为否定后向断言

echo preg_replace( "/(?<!\\\\)\\[/", '{', "\[ [ [ \[ [" );

基本上,“仅当前面没有 \ 时才用 { 替换 [”

于 2009-09-03T17:09:42.803 回答
1

为了完整性:

如果您的正则表达式引擎是原始的并且不知道如何进行负面的lookbehinds(PHP不是这种情况),还有另一种方法可以做到这一点:

$str = preg_replace( "/(^|[^\\\\])\\[/", '$1{', $str );

这将捕获限制为^(开始)或[^\](任何非斜线)的前一个字符,并将其传递给替换。

于 2009-09-03T17:40:03.893 回答