0

どうすれば両方を一致させることができます(http://[^"]+)か?:

<a href="http://yoursite.com/goto/http://aredirectURL.com/extraqueries"></a>

(私はそれが違法なURLであることを知っていますが、同じ考えです)

正規表現で次の2つの一致を取得してください。

1 http://yoursite.com/goto/http://aredirectURL.com/extraqueries
2 http://aredirectURL.com/extraqueries

複数のpreg_match_allを実行せずに

本当に困惑しました、あなたが落とすことができるどんな光にも感謝します。

4

3 に答える 3

1

この正規表現により、必要な出力が得られます((?:http://[^"]+)(http://[^"]+))。非キャプチャグループの使用法に注意してください(?:regex)。非キャプチャグループの詳細については、「正規表現の高度な構文リファレンス」を参照してください。

<?php
preg_match_all(
    '((?:http://[^"]+)(http://[^"]+))',
    '<a href="http://yoursite.com/goto/http://aredirectURL.com/extraqueries"></a>',
    $out);
echo "<pre>";
print_r($out);
echo "</pre>";
?>

上記のコードは以下を出力します:

Array
(
    [0] => Array
        (
            [0] => http://yoursite.com/goto/http://aredirectURL.com/extraqueries
        )

    [1] => Array
        (
            [0] => http://aredirectURL.com/extraqueries
        )

)
于 2012-04-19T23:23:46.857 に答える
0

この関数を使用して文字列を分割できます。

http://de.php.net/preg_split

各部分には、たとえば、結果で指定された配列内のURLの1つを含めることができます。

さらにコンテンツがある場合は、フルテキストが「処理中」のときにコールバック操作を使用してpreg_splitを呼び出すことができます。

于 2012-04-19T23:05:39.040 に答える
0
$str = '<a href="http://yoursite.com/goto/http://aredirectURL.com/extraqueries"></a>';

preg_match("/\"(http:\/\/.*?)(http:\/\/.*?)\"/i", $str, $match);

echo "{$match[0]}{$match[1]}\n";
echo "{$match[1]}\n";
于 2012-04-19T23:30:59.463 に答える