如何使用 preg_replace 删除 X 和 Y 之间的内容?

发布于 2024-09-28 07:57:55 字数 224 浏览 3 评论 0原文

用于删除引用和目录“uploads/”之间的任何内容的正则表达式是什么?

使用正则表达式生成器,我得到这个: (?<=\=")[^]+?(?=uploads/)

$block_data = preg_replace('/(?<=\=")[^]+?(?=uploads/)/g','',$block_data);

但似乎正在删除所有内容:(

What would the regular expression be for removing any content between a quote, and the directory "uploads/"?

Using a regexpression generator, I get this: (?<=\=")[^]+?(?=uploads/)

$block_data = preg_replace('/(?<=\=")[^]+?(?=uploads/)/g','',$block_data);

But seems to be removing everything :(

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

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

发布评论

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

评论(2

只怪假的太真实 2024-10-05 07:57:55

您应该转义“uploads/”中的“/”,并且 g 不是有效的修饰符,加上 [^] 无效,我猜您想要 相反。

这是您的正则表达式:

/(?<=\=").+?(?=uploads\/)/

ideone 上的测试

You should escape the "/" in "uploads/" and g isn't a valid modifier, plus [^] is invalid, I guess you wanted . instead.

Here is your regex :

/(?<=\=").+?(?=uploads\/)/

The test on ideone

始终不够 2024-10-05 07:57:55

简单的解决方案是

$block_data = preg_replace('/(?<=").*?(?=uploads\/)/','',$block_data);

进行更改:

  1. 简化了后向断言和前向断言,
  2. 在前向中转义了 /
  3. 删除了 g 修饰符,这在 PHP 中是不必要的

这可行,只要我可以看出,将 first"middle/uploads/end" 减少为 first"uploads/end"

The simple solution would be

$block_data = preg_replace('/(?<=").*?(?=uploads\/)/','',$block_data);

Changes made:

  1. Simplified your lookbehind and lookahead assertions
  2. escaped the / in the lookahead
  3. removed the g modifier, which is unnecessary in PHP

This works, so far as I can tell, reducing first"middle/uploads/end" to first"uploads/end".

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