【发布时间】:2019-08-31 17:20:47
【问题描述】:
示例文本位于:https://regex101.com/r/tfYEkO/1
我想在 php 代码中找到包含空行的 heredocs。
我可以使用这个正则表达式来做到这一点,但如果一个文件中有 2 个 heredocs,它会从第一个的开头匹配到第二个的结尾:
<<<([A-Z]+)\n.*\n\n.*\n *\1\b
所以我认为负前瞻可以解决它,但这与任何事情都不匹配:
<<<([A-Z]+)\n(?!.*\1.*).*\n\n(?!.*\1.*).*\n *\1\b
我不认为我可以使用带有.* 的负面回溯。我尝试了不贪婪的标志,但这似乎并没有改变它。
仅供参考,php中的heredoc以<<<和一个关键字开头,并以该关键字在它自己的行结束:
$foo = <<<HTML
This is the string that is returned.
It can contain multiple lines.
HTML;
【问题讨论】:
-
试试
'~<<<([A-Z]+)(?:\R(?!\s*\1;$).*)*\R(?:\R(?!\s*\1;$).*)*\R\s*\1;$~m',见demo。实际上,$可以替换为\R,因为NAME;后面必须有一个换行符。
标签: php regex pcre regex-negation heredoc