0

私のテキストは次のとおりです。

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];

しかし、それは私に結果を与えません

4

2 に答える 2

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です。

于 2013-08-21T18:57:16.300 に答える
0

貪欲なマッチング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];
于 2013-08-21T18:56:05.370 に答える