这个问题是PHP's preg_match_all() to pull out all php tags
的第2部分我需要将此正则表达式/<\?.*?(?:\?>|$)/s
扩展为在单引号或双引号内找到标记时不匹配。这将涉及反向引用匹配的引用类型,这超出了我对正则表达式的直观理解。
示例HTML:
<?
// Test xml
$this->_xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
$this->_xml .= "<TransferredValueTxn xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" >\n";
$this->_xml .= "<?=$test?> <TransferredValueTxnReq>" . trans("test") . "\n";
?>
希望结果:
[0] => "<?
// Test xml
$this->_xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
$this->_xml .= "<TransferredValueTxn xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" >\n";
$this->_xml .= "<?=$test?> <TransferredValueTxnReq>" . trans("test") . "\n";
?>"
答案 0 :(得分:1)
如果您尝试使用PHP来解析PHP,则可能需要尝试使用token_get_all()
函数。它将为您完成大量工作,使用PHP用于解析其运行的代码的相同引擎。
答案 1 :(得分:0)
供将来参考:/<\?(?:.*?(?:(\"|').*?[^\\]\1)*)*(?:\?>|$)/s
完美地完成所有单元测试。