【问题标题】:regex with php for string replacement not working properly使用 php 进行字符串替换的正则表达式无法正常工作
【发布时间】:2015-08-20 16:51:31
【问题描述】:

我试图理解 php 中 preg_replace 操作中正则表达式背后的逻辑,但我不明白。

我正在尝试截取width="560" 之类的字符串并将其替换为width="100%"

整数值自然不是常数,所以我不能使用简单的 str_replace 调用。

我尝试使用preg_replace("/(\d)/", "100%", $input_lines); $input_lines = 'width="560"';

但我得到:width="100%100%100%"

我错过了一些关于递归的东西。 有什么线索吗?

编辑 社区回答后,我必须在我的帖子中添加一些规范。

我想要做的是采用 youtube 嵌入代码,例如

<iframe width="560" height="315" src="https://www.youtube.com/embed/_qvp9a1x2UM" frameborder="0" allowfullscreen></iframe>

将 560 替换为 100%,将 315 替换为计算值

【问题讨论】:

  • 这里没有观察到递归行为。您的模式按顺序匹配每个数字,并且每个数字都替换为您的替换字符串。一个提示:如果您不使用任何反向引用,并且将其设置为整个模式(除非您使用 preg_split 拆分),则无需使用捕获组。

标签: php regex


【解决方案1】:

尝试(\d+).+ 搜索模式一次或多次。

preg_replace("/(\d+)/", "100%", $input_lines);

根据您的更新,您的正则表达式应该是:

preg_replace("width=\"(\d+)\" height=\"(\d+)\"", "width=\"100%\" height=\"your calculated value\"", $input_lines);

Demo

【讨论】:

  • 谢谢,它工作正常!如果我也想替换“宽度”这个词怎么办?用“身高”说。
  • 如果您只想更改width,请将此(\w+) 替换为height。如果您想同时更改这两个 (\w+)="(\d+)"height:"100%"
  • 谢谢。该字符串包含一个更大的 html 字符串。您的代码会在字符串中取任何单词并将其更改为“height”吗?
  • 如果你只想改变宽度到高度,硬编码正则表达式中的宽度,像这样width="(\d+)".verify it here
【解决方案2】:

我不是 php 专家,但在正则表达式方面:

preg_replace("/(\d*)/", "100%", $input_lines);

选择组内的所有数字。否则会创建 3 个不同的并替换为您的字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多