私のテキストは次のとおりです。
u0026itag=22\u0026url=http%3A%2F%2Fr5---sn-q4f7dnel.c.youtube.com\u0026sig
そして、 u0026url 私の PHP コードを解析したい:
preg_match('/u0026itag=22\u0026url=(.*?)/', $part, $A);
echo $A[1];
しかし、それは私に結果を与えません
私のテキストは次のとおりです。
u0026itag=22\u0026url=http%3A%2F%2Fr5---sn-q4f7dnel.c.youtube.com\u0026sig
そして、 u0026url 私の PHP コードを解析したい:
preg_match('/u0026itag=22\u0026url=(.*?)/', $part, $A);
echo $A[1];
しかし、それは私に結果を与えません
最初のヒント:エラーを有効にすると、PHP は何が問題なのかを教えてくれます。最初にコードをそのままコピーしたとき、次の警告が報告されました。
警告: preg_match(): コンパイルに失敗しました: PCRE は、オフセット 14 で \L、\l、\N{name}、\U、または \u をサポートしていません
したがって、これは、そこに逐語的に入力したシーケンスが正規表現として解析されているため、エスケープまたは引用が必要であるというヒントです。ここで引用することを好みました。つまり、最初は \Q で、最後は \E で囲みます (QuotE):
$result = preg_match('/^\Qu0026itag=22\u0026url=\E(.*?)/', $subject, $matches);
## ##
これにより、エラーが表示されなくなり$result
、1 に変わります。これは、機能したことを意味します。ただし、グループ 1 にはまだ一致が表示されないか、空の一致が表示されます。
[0] => string(22) "u0026itag=22\u0026url="
[1] => string(0) ""
それは、star での繰り返しを貪欲から怠惰に変えたからです。代わりに所有格にしましょう:
/^\Qu0026itag=22\u0026url=\E(.*+)/
# plus means posessive
[1] => string(52) "http%3A%2F%2Fr5---sn-q4f7dnel.c.youtube.com\u0026sig"
これで見栄えが良くなり、「URL」が含まれています。
つまり、正規表現についていくつか説明しましたが(うまくいけば、これでいくつかの指針が得られます)、実際には最初に使用するのに適切なツールではないでしょう。
ここにあるものは、実際に URL エンコードされたものを含む JSON 文字列のように見えます。
したがって、まず JSON 文字列を でデコードしjson_decode
、次に で URL を解析することをお勧めします。あとは、クエリ パラメータparse_url
を取得するだけです。url
それはparse_str
です。
貪欲なマッチングhttp://regex101.com/r/lT1wK5を試しましたか? \u も忘れずにエスケープしてください。
コンパイルに失敗しました: PCRE は \L、\l、\N{name}、\U、または \u をサポートしていません
例:
$var = "u0026itag=22\u0026url=http%3A%2F%2Fr5---sn-q4f7dnel.c.youtube.com\u0026sig";
preg_match('/u0026itag=22\\\u0026url=(.*)/', $var, $A);
echo $A[1];