0

我正在尝试编写一个正则表达式来转义未被 {} 包围的 $ 符号。

这是我到目前为止所拥有的:\^\$|[^\{]\$\

$test 

预期:匹配实际:匹配

{$test1}

预期:不匹配 实际:不匹配

{$test}  $test1

预期:匹配第二个实际:匹配第二个 $ 符号之前的空格

{ $test3 }

预期:不匹配 实际:匹配 $ 符号前的空格

所以基本上如果 $ 用括号括起来,它永远不应该匹配,但任何其他 $ 应该匹配。

我正在使用 php,我假设没有嵌套括号。括号和 $ 符号之间可以有空格(n 个空格或换行符或制表符,任何类型的空格)。

4

2 回答 2

3

假设没有嵌套括号,这应该对您有用

$result = preg_replace('/\$(?![^{]*\})/m', '', $subject);

解释

"
\$         # Match the character “$” literally
(?!        # Assert that it is impossible to match the regex below starting at this position (negative lookahead)
   [^{]       # Match any character that is NOT a “{”
      *          # Between zero and unlimited times, as many times as possible, giving back as needed (greedy)
   }          # Match the character “}” literally
)
"
于 2013-07-01T18:00:19.633 回答
0

怎么样:\^(?:{[^}]*}|[^{])*\$\ 替代品$1\\$

于 2013-07-01T15:28:58.773 回答