2
preg_match(#(?:([a-zA-Z-]+):)?(?://(?:([a-zA-Z0-9_!$&\'()*+,;=._~%-]+)(?::([a-zA-Z0-9_!$&\'()*+,;=._~%-]*))?@)?([a-zA-Z0-9-._]+)(?::([0-9]*))?)?([a-zA-Z0-9_!$&\'()*@+,:;=._~/%-]*)(?:\\?([0-9a-zA-Z!$&\'()*@+,:;=._~%-]*))?(?:\\#(.*))?#, $uri, $m));

上記の正規表現はURLを照合するために使用され、結果はm[1]=スキームm[2]=ユーザーm[3]=パスm[4]=ホストm[5]=ポートm[6]=パスm[7]= queryString m[8]=フラグメント

たとえば、queryStringに配列が含まれている場合を除いて、適切に機能します。?ar [k1] = v1&ar [k2] = v2

私の質問は次のとおりです。1。正規表現のシャープ#の意味は何ですか。2。クエリ文字列のインクルード配列と一致するように正規表現を変更するにはどうすればよいですか。

4

4 に答える 4

3

を使用する方が適切でありparse_url、クエリ文字列もキャプチャします。これを使用しparse_strて、キー->値のペアの配列を取得できます。

于 2012-07-01T14:42:06.337 に答える
2

parse_str代わりに使用してください:http: //php.net/manual/en/function.parse-str.php

これは、必要なことを正確に実行し、組み込みであり、最も重要なのは、正規表現(そのモンスターを見てください):sです。

ちなみに、あなたの質問に直接答える#のは、正規表現の区切り文字にすぎません。

于 2012-07-01T14:41:03.950 に答える
2

1.URLの一部を意味する正規表現のシャープ(#2番目

スキーム:// username:password @ domain:port / path?#query_stringfragment_id

2. URLを解析し、そのコンポーネントを返します

于 2012-07-01T15:00:27.720 に答える
1

この正規表現は、 RFC 3986に従って、URIの構文を非常に厳密に適合させているようです。これは、実際にはプレーン[またはクエリ]内を許可していません。

  query       = *( pchar / "/" / "?" )
  pchar       = unreserved / pct-encoded / sub-delims / ":" / "@"
  unreserved  = ALPHA / DIGIT / "-" / "." / "_" / "~"
  pct-encoded = "%" HEXDIG HEXDIG
  sub-delims  = "!" / "$" / "&" / "'" / "(" / ")"
              / "*" / "+" / "," / ";" / "="

これらの文字も許可する場合は、既存の正規表現のクエリ部分にこれを使用します。

… (?:\\?([0-9a-zA-Z!$&\'()*@+,:;=._~%[\]-]*))? …
于 2012-07-01T15:24:30.637 に答える