我正在尝试通过 preg_replace_callback 函数处理类似 shrotcode 的内容:
$new_content = preg_replace_callback("|\[BLOCK\s?(TYPE=[0-9a-z\/]+)?\s?(TEXT=[a-z]+)?\s?(LAST)?\s?\]((?:(?!BLOCK).)*)\[\/BLOCK\]|","block",$content);
主题($content)例如是这样的:
[BLOCK TYPE=1/2 TEXT=right LAST]
<ul><li>something</li>
</ul>
[/BLOCK]
[BLOCK TYPE=1/2 TEXT=right LAST][NEXTSHORTCODE=something][/BLOCK]
[BLOCK TYPE=1/2 TEXT=right LAST]123[/BLOCK]
我遇到了一个问题:
函数 preg_replace_callback 匹配整个主题(从 BLOCK 到最后一个 /BLOCK)而不是 /BLOCK 的第一次出现。我想从简码的内部内容中排除字符串 BLOCK ((?:(?!BLOCK).)*) 来解决它,但它不适用于其他字符,如换行符等。
你可以在这里看到我的尝试:http ://rubular.com/r/0AqadXVdON
感谢您的建议,抱歉英语不好。