用正则表达式替换div

时间:2012-07-31 19:02:44

标签: php regex

我需要用textareas替换所有div的containsig类“ta”和id“ta_somenumber”,这些textareas将保持相同的属性。以下是示例代码:

$html_content = '<div class="ta" id="ta_345">sometext</div><span style="...">Some text</span><--!more html--><div class="ta" id="ta_5687">sometext</div>';

这是我想要实现的目标:

$html_new_content = '<textarea class="ta" id="ta_345">sometext</textarea><span style="...">Some text</span><--!more html--><textarea class="ta" id="ta_5687">sometext</textarea>';

我正在尝试这个:

$regex1 = '#\<div class=\"ta\" id=\"(.*)\"\>(.+?)\<\/div\>#s';
$regex2 = '#\<textarea class=\"ta\" id=\"(.*)\"\>(.+?)\<\/textarea\>#s';

$result = str_replace($regex2, $regex3, $html_content);

但由于某种原因,这不起作用。我试过preg_replace但没有运气。

1 个答案:

答案 0 :(得分:2)

你只需要一个正则表达式,看起来像这样:

$regex = '#<div class="ta" id="([^"]+)">(.+?)</div>#s';
$result = preg_replace( $regex, 
    '<textarea class="ta" id="$1">$2</textarea>', 
    $html_content
);

这会找到所有<div>标记,在反向引用#1中捕获它们的ID属性,在反向引用#2中捕获它们的内容。然后,替换很简单:将<div>替换为具有“ta”类的<textarea>以及与原始<div>相同的ID和内容。

您可以在the demo中看到它。