[英]Encase a single or multiline search result PHP/regex
我需要将此字符串括起来:
<p class="someclass">some text</p>
在这样的表格标签中:
<table class="anotherclass"><tr><td>
<p class="someclass">some text</p>
</td></tr></table>
它变得更加复杂,因为可能需要封装一,两或三行代码,如下所示:
<table class="anotherclass"><tr><td>
<p class="someclass">some text</p>
<p class="someclass">more text</p>
<p class="someclass">another line of text</p>
</td></tr></table>
我已经尽力使用PHP和以下代码,但是它不起作用:/ $ doc包含html文档的字符串代码,首先我计算需要生成所需正则表达式的行数,我不确定$&是否可以曾经说过:这就是我要包装的
$line_count=substr_count($doc, '<p class="someclass">');
for($i=0;$i<$line_count;$i++)
{$add.='[^</p>]</p>';}
$regex='/<p class="someclass">'.$add.'/';
$replace='<table class="anotherclass"><tr><td>$&</td></tr></table>';
$doc=preg_replace($regex, $replace, $doc);
我是否接近解决方案?
尝试此代码-它会提取一个或多个
“ someclass”的块
$doc = '
<p class="someclass">Jerky tri-tip pancetta t-bone beef, meatball meatloaf flank brisket beef ribs biltong short ribs capicola fatback.</p>
<p class="someclass">Meatball short ribs venison leberkas shoulder meatloaf corned beef ham salami. Shank sirloin fatback flank pig spare ribs.</p>
<p class="someclass">Cow hamburger leberkas drumstick jerky beef short loin tenderloin swine pork. Kielbasa short loin jerky salami.</p>
';
$regex='/((<p class="someclass">(?:(?!(<\/p>)).*?)<\/p>\s*)+)/is';
$replace='<table class="anotherclass"><tr><td>$1</td></tr></table>';
$doc=preg_replace($regex, $replace, $doc);
一些评论:
((\\ s *)+)-()+将使其匹配1或更大,\\ s *确保将忽略之间的间距
接下来,外部()是获得所有匹配项所必需的
块成$ 1变量
/ is-修饰符,可将整个文档视为一个字符串并忽略大小写。 可能会方便。
(?:(?!(</ p>))。*?)-这是主要部分-否定条件匹配以确保没有
内部匹配字符串
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.