如何使用正则表达式检测PHP中的列表或枚举

时间:2014-02-11 16:40:09

标签: php regex

我从XML Feed中获取数据。我无法控制饲料,也无法控制饲料。

有时,数据包含列表/枚举。我想将其解析为干净的HTML无序列表。

我收到的数据将采用以下格式:

<p>Some text in a paragraph tag</p>
<p>
- List item one <br>
- List-item-two<br>
-List item three  <br>
- Listitem four<br>
</p>
<p>Another paragraph with text, and maybe even more paragraphs after this one!
They might even contain - dashes - - -  or <br><br> breaks!</p>

请注意,并非每个列表项都格式整齐。有些包含<br>标记之间或短划线与文本之间的尾随步调。

如何在PHP中对此进行后处理以获得此结果:

<p>Some text in a paragraph tag</p>
<p><ul>
    <li>List item one</li>
    <li>List-item-two</li>
    <li>List item three</li>
    <li>Listitem four</li>
</ul></p>
<p>Another paragraph with text, and maybe even more paragraphs after this one! 
They might even contain - dashes - - -  or <br><br> breaks!</p>

我可以使用正则表达式吗?如果是这样,它会是什么样子?

2 个答案:

答案 0 :(得分:3)

是的,我认为正则表达式是一个很好的起点。看看preg_replace

正则表达式可能是这样的(未经测试):

$li = preg_replace('/^-([a-z]+)(<br>)?$/i', '<li>$1</li>', $entry);

当然这不起作用(你需要支持空白等),但我认为你明白了。

答案 1 :(得分:3)

您可以使用^-\s*\b(.+)\b\s*<br>$替换<li>$1</li>来开始使用。我将把所有内容都包裹在<ul/>中,直到你。