繁体   English   中英

包含单行或多行搜索结果PHP / regex

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM