正则表达式:忽略是否有html标记

时间:2011-08-03 01:43:32

标签: php html regex tags

我有一个正则表达式模式:

\(\s*\'\s*(.*?)\s*\'\)

此模式表示在('TEXT')之间获取任何文本。

存在问题:文本可能包含HTML标记。

所以我想要一个模式。如果没有找到HTML标记,请正常获取文本,但如果找到HTML标记,则模式会在标记之间获取文本。


示例:

如果文字是

  

('foo foo text here')

模式得到:

  

foo foo text here


如果文字是:

  

('<div class='test'> foo foo text here </div>')

模式得到

  

foo foo text here

因此模式会忽略HTML标记(如果有的话),并抓取文本。

2 个答案:

答案 0 :(得分:4)

您可以在preg_match()内拨打strip_tags()。那将转向:

('<div class='test'> foo foo text here </div>')

分为:

( 'foo foo text here' )

然后你设计它的正则表达式将删除parens。

preg_match("/\(\s*\'\s*(.*?)\s*\'\)/", strip_tags($yourstring), $matches);

答案 1 :(得分:0)

我相信这也有效:

>\s*(.*?)\s*</|\(\s*\'(?!<)\s*(.*?)\s*\'\)

虽然它确实捕获到两个不同的捕获组。

至少可能是另一种选择: - )