需要正则表达式方面的帮助


need help in Regular Expression

我在一个奇怪的场景中,我需要在多列中显示内容。我正在使用 css3 列-cont 和 jquery 插件列化器用于旧版本的 IE。问题是我无法完全控制数据,因为它由外部 Web 服务提供服务。在大多数情况下,内容包装在多个段落选项卡中

Content#1

 <p><strong>Heading</strong><br>This is a content</p>
 <p><strong>Heading</strong><br>This is a content</p>

但在少数情况下,数据不会包装在<p>标签中,如下所示:

Content#2

<strong>Day 1: xyz </strong><br>
 lorem lipsum <br> <br> 
<strong>Dag 2: lorem lipsum</strong><br> 
Morgonflyg till Arequipa i södra Peru.
<br> <br> 

真正的问题是jquery columnizer当要求插件列化此类内容时,它会使用此标记挂起浏览器。

现在我想借助正则表达式将Content#2转换为Content#1,即将内容包装成合理的段落。我希望我已经把自己说清楚了我正在使用PHP。

提前谢谢你!

您的内容不稳定,正则表达式不会像这样对不同的内容施展魔法。话虽如此,每当您从其他网站接收数据时,很有可能有一天它会返回不同的模式,因此您的规则将不再好。您需要有一个可靠的来源才能获得可靠的结果。

这是一个肮脏的字符串操作,但如果模式保持一致,它将得到你需要的东西。而且,我仍然坚持认为您必须使用可靠的来源。

$str = "<strong>Day 1: xyz </strong><br>
 lorem lipsum <br> <br>
<strong>Dag 2: lorem lipsum</strong><br>
Morgonflyg till Arequipa i södra Peru.
<br> <br> ";
function parse($data)
{
  if(substr($data, 0, 3) == "<p>") return $data;
  $chunks = explode("<strong>", $data);
  $out = array();
  foreach($chunks as $chunk)
  {
    $item = $chunk;
    $last_br = strpos($item, "<br> <br>");
    if($last_br > -1){ $item = substr($item, 0, $last_br); }
    $item = "<p>" . $item . "</p>";
    $out[] = $item;
  }
  return implode("'n", $out);
}
echo parse($str);

您可以使用此模式:

/(?<!^<p>)(<strong>.*?)(<strong>.*)$/gs

演示

请注意,仅当您的字符串以 <p> 开头时,否定后视中的排除才有效......因此,请考虑在应用正则表达式之前对其进行修剪...

<br>标签必须使用另一个正则表达式或 str_replace() 删除

另外,考虑使用比正则表达式更合适的方法来解析 DOM HTML......