我的问题类似于Stackoverflow上提出的this问题。但是有区别。
我将以下内容存储在MySQL表中:
<p align="justify">First paragraph</p>
<p>Second paragraph</p>
<p>Third paragraph</p>
<div class="item">
<p>Some paragraph here</p>
<p><strong><u>Specs</u>:</strong><br /><br /><strong>Weight:</strong> 10kg<br /><br /><strong>LxWxH:</strong> 5mx1mx40cm</p
<p align="justify">second last para</p>
<p align="justify">This is the paragraph I am trying to remove with regex.</p>
</div>
我正在尝试删除表格中每一行的最后一个段落标记和内容。链接问题中提到的最佳答案表明遵循正则表达式 -
preg_replace('~(.*)<p>.*?</p>~', '$1', $html)
与关联问题的区别在于 - 有时我的最后一个段落标记可能 (或可能不会) 具有属性align="justify"
。如果最后一个段落具有此属性,则提到的解决方案将删除没有属性的内容的最后一段。因此,我正在努力寻找删除最后一段的方法,无论其属性状态如何。< / p>
答案 0 :(得分:1)
将正则表达式更改为:
preg_replace('~(.*)<p[^>]*>.*</p>\R?~s', '$1', $html)
正则表达式突破
~ # Opening regex delimiter
(.*) # Select any chars matching till the last '<p>' tags
# (actually it matches till the end then backtrack)
<p[^>]*> # select a '<p>' tag with any content inside '<p .... >'
# the content chars after '<p' must not be the literal '>'
.* # select any char till the '</p>' closing tag
</p> # matches literal '</p>'
\R? # select (to remove it) any newline (\r\n, \r, \n)
~s # Closing regex delimiter with 's' DOTALL flag
# (with 's' the '.' matches also newlines)