使用 preg_replace 替换字符,除非前面有转义字符

发布于 2024-08-03 23:41:10 字数 227 浏览 2 评论 0原文

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

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

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

预先非常感谢

i'm trying to do the following hope there's a reg_ex expert around to shed some light.
I need to replace the character [ in my code and make it a {. But there is cases where the [ needs to remain a [ and not change. So the way i figured it is i need to use the

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

function with a suitable regular expression that will result the [ characters that are not preceded by the escape character to be used lets say .
So how can i get to replace this "[" and not this "["?

thanks a lot in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一向肩并 2024-08-10 23:41:10

你可以做到这一点,它是通过一个约定调用否定后向断言

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

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

You can do this, and it's with a convention call negative lookbehind assertions

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

Basically, "replace [ with { only when not preceded by \"

静赏你的温柔 2024-08-10 23:41:10

为了完整起见:

如果您的正则表达式引擎很原始并且不知道如何执行此操作,还有另一种方法 负向后查找(PHP 不是这种情况):

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

这会捕获前面的字符,该字符仅限于 ^ ( start) 或 [^\] (任何非斜杠),并将其传递给替换。

For completeness:

There another way to do this if your regexp engine is primitive and doesn't know how to do negative lookbehinds (which is not the case with PHP):

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

This captures the preceding character, which is restricted to ^ (start) or [^\] (any non-slash), and passes it through the replace.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文