preg_match_all()不在引号内的php标签

时间:2011-12-08 16:09:24

标签: php regex

这个问题是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";
?>"

2 个答案:

答案 0 :(得分:1)

如果您尝试使用PHP来解析PHP,则可能需要尝试使用token_get_all()函数。它将为您完成大量工作,使用PHP用于解析其运行的代码的相同引擎。

答案 1 :(得分:0)

供将来参考:/<\?(?:.*?(?:(\"|').*?[^\\]\1)*)*(?:\?>|$)/s

完美地完成所有单元测试。