【问题标题】:Regex Inside str_replace正则表达式内部 str_replace
【发布时间】:2021-03-21 08:47:27
【问题描述】:

我需要下面的str_replace 代码行来匹配只有在<td></td> 内部也会有其他随机内容时(所以也许需要通配符?)。我认为涉及一些正则表达式,但我无法使其工作。该代码有效,但我只想让它在我的表格和整个页面中有效。

作为参考,包含此代码的较大的 sn-p 将较长的产品规范在连字符处分成两行,而不是在表格中自然出现自动换行时的奇怪位置。

例如:(16 x 20 x 18 (406 x 508 x 457) - 24 x 36 x 18 (711 x 914 x 457)

$html = str_replace( ') - ', ') - <br />', $html );

即使输入我们所有数据的人出于某种原因没有在连字符周围使用空格,或者可能不小心在一侧或另一侧使用了空格,如果它也能正常工作,那就太好了。我认为总会有括号。

谢谢!

【问题讨论】:

  • 究竟是什么“其他随机的东西”?您的示例是您将看到的唯一格式吗?
  • 让我们从示例中的格式开始(以及 Eg: 后面的第一个括号不属于那里,抱歉)。

标签: php regex str-replace


【解决方案1】:

听起来您需要preg_replace() 而不是str_replace()

试试这个:

<?php
$regex = "/^(<td.*?>)(.*?)\s*-\s*(.*)(<\/td>)$/i";
$html = '<td class="someClass">16 x 20 x 18 (406 x 508 x 457) - 24 x 36 x 18 (711 x 914 x 457)</td>';
$htmlOut = preg_replace($regex,'$1$2 - <br>$3$4', $html, -1, $replacements);

echo "Initial string: ".htmlentities($html)."<br>";
echo "Replacements: ".$replacements.'<br>';
echo "Output: ".htmlentities($htmlOut);

?>

输出:

Initial string: <td class="someClass">16 x 20 x 18 (406 x 508 x 457) - 24 x 36 x 18 (711 x 914 x 457)</td>
Replacements: 1
Output: <td class="someClass">16 x 20 x 18 (406 x 508 x 457) - <br>24 x 36 x 18 (711 x 914 x 457)</td>

这里的关键是从原始字符串中捕获部分并在以后重新组合它们。四个捕获组依次捕获前导&lt;td&gt; 标记(包括属性)、连字符左侧的文本、连字符右侧的文本、结束&lt;/td&gt; 标记。请注意,连字符以及任意数量的空格都会匹配,但不会被捕获。

重新组装时,只需连接各个捕获的组并插入您想要的任何内容而不是连字符。

请注意,这是一个非常具体的使用正则表达式来解析特定 HTML 标记的方法。您通常不应该使用正则表达式来解析 HTML。请参阅here 了解可能发生的情况。

【讨论】:

  • 谢谢 - 我想我们可以对这项工作进行修改。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
  • 1970-01-01
  • 2011-05-13
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
  • 2011-04-21
相关资源
最近更新 更多