我有一个正则表达式模式:
\(\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标记(如果有的话),并抓取文本。
答案 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*\'\)
虽然它确实捕获到两个不同的捕获组。
至少可能是另一种选择: - )