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

ジャック・マニーは良い点を述べました、しかし、あなたの特定のケースのためにあなたは単に使うことができます

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

またはの直後に挿入する、貪欲でない/怠惰な演算子を使用する必要があります。これらの2つの数量詞(*と+)は貪欲な演算子です。つまり、達成しようとしている最短の一致ではなく、可能な限り最長の一致を取得します。?+*

于 2013-02-26T20:29:24.547 に答える
1

次の方法を試してください。

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

唯一の違いは、 によって変更さ.*れたこと.*?です。詳しくはこちらをご覧ください貪欲に気をつけてください!

于 2013-02-26T20:25:33.800 に答える