0

HTML と PHP のテキストを含む長い文字列があります。その文字列で、いくつかの PHP 関数呼び出しのすべての出現箇所を検索し、パラメーターを取得したいと考えています。今、正規表現の助けが必要です。

検索する関数: link_tolink_to_functionおよびmail_to

私の未完成の作業コピー:

$regexp = '...' // Help here please!

$str = "Bla bla bla <?php echo link_to('Lorem', 'Ipsum') ?> bla bla bla <?php echo link_to_function(\"Lorem2\", \"Ipsum2\") ?> bla bla bla...";

preg_match_all
(
  $regexp,
  $str,
  $matches
);

次のようなものを返したい:

$matches = array
(
  [0] => array
  (
    [0] => "link_to('Lorem', 'Ipsum')"
    [1] => "link_to_function(\"Lorem2\", \"Ipsum2\")"
  )
  [1] => array
  (
    [0] => "Lorem"
    [1] => "Lorem2"
  )
  [2] => array
  (
    [0] => "Ipsum"
    [1] => "Ipsum2"
  )
);

ご覧のとおり、パラメーターは一重引用符と二重引用符の両方で囲むことができます。パラメータでは、すべてのタイプの文字を使用できる必要があります。

そしてもう 1 つ: すべての呼び出しは 1 つまたは2 つのパラメーターを持つことができます。

4

2 に答える 2

0

試す

[a-z_]+\(\s*(?:['"](.*?)['"],?\s*)*\)

必要に応じて改良します。手元にphpがありません...

于 2012-07-15T21:29:32.780 に答える
0

1 つまたは 2 つのパラメーターを個別にテストする必要があると思います。2 つのパラメーターの場合、次のようなものが必要です。

"link_to.*?\(\s*'(.*?)'\,\s*'(.*?)'\s*\)"

一重引用符だけでなく二重引用符もキャッチする必要があると思われる場合は、次のように変更します。

"link_to.*?\(\s*['"](.*?)['"]\,\s*['"](.*?)['"]\s*\)"
于 2012-07-15T16:37:51.640 に答える