如果我有以下代码并且想要使用正则表达式仅返回包含“function xyz”的PHP块:
<?php
function xyz(
// Code goes here
)
?>
<!-- HTML code here -->
<?php
// Other code
echo "Its done!";
?>
我尝试执行以下正则表达式:/(<\?php).*function xyz。*(\?&gt;)/ s以获得以下结果:
<?php
function xyz(
// Code goes here
)
?>
但是它没有得到预期的结果,而是最终给了我第一个“&lt; \?php”和最后一个“\?&gt;”之间的所有内容。任何人都可以建议正确的正则表达式语法来实现这一目标吗?
答案 0 :(得分:2)
Jack Maney提出了一个很好的观点,但是,根据您的具体情况,您可以使用
/<\?php.*function xyz.*?\?>/s
您需要使用 ungreedy / lazy 运算符,该运算符是您?
或+
之后立即插入的*
运算符。这两个量词(*和+)是贪婪的算子,这意味着它会抓住最长的匹配,而不是我们想要达到的最短匹配。
答案 1 :(得分:1)