0

以下の文字列、つまりURLhttps://domain.com/gamer?hid=.115f12756a8641から抽出するにはどうすればよいですか?

rrth:'http://www.google.co',cctp:'323',url:'https://domain.com/gamer?hid=.115f12756a8641',rrth:'https://another.com'

追伸:私は正規表現に不慣れで、学んでいます。しかし、上記の文字列はフォーマットされているようです。したがって、何らかのショートカットが必要です。

4

2 に答える 2

4

入力文字列が呼び出された場合$str:

preg_match('/url:\'(.*?)\'/', $str, $matches);
$url = $matches[1];

(.*?)url:'との間のすべてをキャプチャし、'後で で取得できます$matches[1]

?特に重要です。そうしないと、最後の最後まですべてを消費してしまいます'

実際の入力文字列に複数のurl:'...'セクションが含まれる場合は、preg_match_all代わりに使用してください。$matches[1]は、必要なすべての値の配列になります。

于 2012-10-23T16:15:31.717 に答える
0

簡単な正規表現:

preg_match('/url\s*\:\s*\'([^\']+)/i',$theString,$match);
echo $match[1];//should be the url

使い方:

/url\s*\:\s*: 一致url+ [任意の数のスペース] + (:コロン)+ [任意の数のスペース]
しかし、これは必要ありません。ここで 2 番目の部分が入ります
\'([^\']+)/i:配列に個別に格納されます。一致するものは次のとおりです。アポストロフィを除く任意の文字 (文字クラスを作成する、つまり、これらの文字を除外します)。したがって、このクラスは、終了/区切りのアポストロフィに到達するまでの任意の文字と一致します。: 文字列に が含まれている可能性がある場合に備えて、大文字と小文字を区別しないフラグである を追加しました。'()$matches[^']+[]^
/iURL:'http://www.foo.bar'i

それはそれについてです。おそらく、正規表現をよりよく理解するために、
このあたりを嗅ぎ回ることができます

注:パターン文字列は区切り文字として単一引用符を使用するため、単一引用符をエスケープする必要がありました:"/url\s*\:\s*'([^']+)/i"同様に機能します。天気がわからない場合や、一重引用符または二重引用符を扱うことになる場合は、引用符を別の char クラスに置き換えることができます。

preg_match('/url\s*\:\s*[\'"]([^\'"]+)/i',$string,$match);

明らかに、そのシナリオでは、パターン文字列に使用した区切り文字をエスケープする必要があります...

于 2012-10-23T16:22:40.127 に答える