2

如果我有以下代码并且只想使用正则表达式返回包含“函数 xyz”的 PHP 块:

<?php
  function xyz(
    // Code goes here
  )
?>

<!-- HTML code here -->

<?php
  // Other code
  echo "Its done!";
?>

我尝试执行以下正则表达式: /(<\?php).*function xyz.*(\?>)/s 以获得以下结果:

<?php
  function xyz(
    // Code goes here
  )
?>

但它最终没有得到预期的结果,而是给了我第一个“<\?php”和最后一个“\?>”之间的所有内容。任何人都可以建议正确的正则表达式语法来完成这个吗?

4

2 回答 2

2

Jack Maney 提出了一个很好的观点,但是,对于您的具体情况,您可以简单地使用

/<\?php.*function xyz.*?\?>/s

您需要使用ungreedy/lazy运算符,它是您在 a or?之后立即插入的 a 。这两个量词(* 和 +)是贪心运算符,这意味着它将获取最长的匹配,而不是我们试图实现的最短匹配。+*

于 2013-02-26T20:29:24.547 回答
1

尝试以下一种:

/(<\?php).*function xyz.*?(\?>)/s

唯一的区别是我更改.*.*?. 在此处阅读有关它的更多信息(在“小心贪婪”下!

于 2013-02-26T20:25:33.800 回答