0

正規表現を使用して文字列から URL パラメーターを取得するのに問題があります。

文字列の例は次のとおりです。

some text and http://google.com/?something=this&tag=yahoo.com and more text、そしてこれから見つけられるようにしたいと思いますyahoo.com

http://google.com注意点は、検索するだけでなく、文字列が で始まることを確認する必要があることです&tag=(.*)

preg_match("/google\.com\/.*&tag=(.*) $/", $subject, $matches)

google.comこれが、その後に何かが続き、&tag=その後にスペースが続くものと一致することを願っています。最終的な目標は、URLtag=からすべての値を解析することです。google.com

これを達成するためのより良い方法はありますか?

アップデート:

だから私はこの新しい正規表現を持っています:/google\.com\/.*(tag=.*)/しかし、URLの後にスペースで終了する方法がわかりません

4

2 に答える 2

4

parse_url()関数に親しみましょう!

$pieces = parse_url('some text http://google.com/?something=this&tag=yahoo.com and whatever');
$query = explode('&', $pieces['query']);

parse_str($pieces['query'], $get);
array_walk($get, function(&$item){
    if (!$sp = strpos($item, ' ')) return;
    $item = substr($item, 0, $sp);
});

var_dump($get); // woo!

編集:機能を提供してくれたジョナサンに感謝しparse_str()ます。

于 2013-08-07T22:28:45.227 に答える
1

の値を取得したい場合はtag、次の正規表現が機能します。

$string = 'some text and http://google.com/?something=this&tag=yahoo.com
and more text
http://google.com/?something=this&tag=yahoo2.com&param=test
';
preg_match_all('#http://google.com\S+&tag=([^\s&]+)#', $string, $m);
print_r($m[1]);

出力

Array
(
    [0] => yahoo.com
    [1] => yahoo2.com
)

説明

  • http://google.com: マッチhttp://google.com
  • \S+: 非空白に 1 回以上一致
  • &tag=: マッチ&tag=
  • ([^\s&]+): 空白以外のすべてと&1 回以上一致し、それをグループ化します

必要に応じてs?afterを追加しhttpて を考慮しhttpsたり、修飾子を追加してi大文字と小文字を区別しないようにすることもできます。

于 2013-08-07T22:38:05.733 に答える