php - 遇到 PHP preg_replace 问题

标签 php preg-replace

好吧,假设我有以下文本...

<h2><a name="test1"></a>Test 1</h2>test 1 text
<h2><a name="test2"></a>Test 2</h2>
test 2 text
<h3><a name="test3"></a>Test 3</h3>
test
3
text
<h4><a name="test4"></a>Test 4</h4>
<h4><a name="test5"></a>Test 5</h4>test 5 text

我想使用正则表达式将该文本替换为以下内容:

<div class="toggle">
    <h2><a name="test1"></a>Test 1</h2>
    <div class="contents">test 1 text</div>
</div>
<div class="toggle">
    <h2><a name="test1"></a>Test 2</h2>
    <div class="contents">test 2 text</div>
</div>
<div class="toggle">
    <h3><a name="test1"></a>Test 3</h3>
    <div class="contents">test
3
text</div>
</div>
<div class="toggle">
    <h4><a name="test1"></a>Test 4</h4>
    <div class="contents"></div>
</div>
<div class="toggle">
    <h4><a name="test1"></a>Test 5</h4>
    <div class="contents">test 5 text</div>
</div>

我尝试使用:

$text = preg_replace('#<h(\d+)>(.*?)</h\1>(.*)#si', '<div class="ToggleContents"><h$1>$2</h$1><div class="contents">$3</div></div>', $text);

但问题是它太贪婪了,我还没有想出如何让它变得不贪婪并起作用。有人有什么想法吗?

最佳答案

$text = '<h2><a name="test1"></a>Test 1</h2> test 1 text
<h2><a name="test2"></a>Test 2</h2> test 2 text
<h3><a name="test3"></a>Test 3</h3> test 3 text
<h4><a name="test4"></a>Test 4</h4> test 4 text
<h4><a name="test5"></a>Test 5</h4> test 5 text';

$text = preg_replace('#<h([1|2|3|4|5|6])>(.*?)</h([1|2|3|4|5|6])>\ (.*?)(\n|$)#si', '
<div class="toggle">
  <h\\1>\\2</h\\1>
  <div class="contents">\\4</div>
</div>
', $text);

或者 <span>解决方案:

$text = '<h2><a name="test1"></a>Test 1</h2><span>test 1 text</span>
<h2><a name="test2"></a>Test 2</h2><span>test 2 text</span>
<h3><a name="test3"></a>Test 3</h3><span>test 3 text</span>
<h4><a name="test4"></a>Test 4</h4><span>test 4 text</span>
<h4><a name="test5"></a>Test 5</h4><span>test 5 text</span>';

$text = preg_replace('#<h([1|2|3|4|5|6])>(.*?)</h([1|2|3|4|5|6])><span>(.*?)</span>#si', '
<div class="toggle">
  <h\\1>\\2</h\\1>
  <div class="contents">\\4</div>
</div>
', $text);

关于php - 遇到 PHP preg_replace 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7184130/

相关文章:

php - 使用 php preg_replace_callback - 但替换整个字符串而不是每个子字符串

php - 如何使用 PHP 和正则表达式将 <span style ="font-weight: bold;">foo</span> 替换为 <strong>foo</strong>?

php - 如何在 Mysql 表中找到匹配的数据行?

php - PDO 无法在其他无缓冲查询处于事件状态时执行查询

php - 为什么 $_POST 是空的?使用变量 $row 作为使用 foreach 的输入名称

php - 删除 perso-arabic 字符串中的隐藏空格

php - 从 Facebook 的 Graph API 发帖时如何使用换行符/换行符

php - ajax 发布但无法阻止刷新

php - preg_replace 删除样式文本/css 标签

php - 粗体和斜体