4

困難に直面していますが、私がやろうとしていることはかなり単純です。URL である文字列があり、http://www.somedomain.com ?id=someid という形式になります。取得したいのは someid 部分です。正規表現を使用できると思いますが、あまり得意ではありません。これが私が試したものです:

Match match = Regex.Match(theString, @"*.?id=(/d.)");

正規表現の解析中にエラーが発生したという正規表現例外が発生します。私がこれを読んでいる方法は"any number of characters"、リテラル"?id="に続く"by any number of digits"です。引き出せるように、数字をグループにまとめました。これの何が問題なのかわかりません。誰かが私が間違っていることを教えてくれたら、感謝します、ありがとう!

4

4 に答える 4

6

正規表現は必要ありません。組み込みのユーティリティを使用するだけです。

string query = new Uri("http://www.somedomain.com?id=someid").Query;
var dict = HttpUtility.ParseQueryString(query);

var value = dict["id"]
于 2012-10-03T17:32:12.007 に答える
4

正規表現にいくつかのエラーがあります。これを試して:

Match match = Regex.Match(theString, @".*\?id=(\d+)");

具体的には、私は:

  • に変更され*.ました.*(ドットはすべての非改行文字に一致し*、先行する 0 個以上を意味します)
  • ?疑問符は正規表現の特殊文字であるため、 の前にエスケープ シーケンスを追加しました。これは、上記のゼロまたは 1 つを意味します。
  • に変更され/d.ました\d*(スラッシュの向きが間違っていて、上で説明した代わりに上で説明したドットを使用しました*)
于 2012-10-03T17:28:02.133 に答える
2

試す

var match = RegEx.Match(theString, @".*\?id=(\d+)");
于 2012-10-03T17:28:01.720 に答える
1
  • エラーは、おそらく先行する*. 正規表現の*文字は、前の文字の 0 回以上の出現と一致します。したがって、最初の文字にすることはできません。
  • おそらくタイプミスですが、数字のショートカットは\d, ではありません/d
  • .任意の文字に一致します。1 つ以上の数字に一致する必要があります。+
  • ?は特殊文字なので、エスケープする必要があります。

したがって、次のようになります。

Match match = Regex.Match(theString, @".*\?id=(\d+)");

そうは言っても、正規表現はこれに最適なツールではありません。適切なクエリ文字列パーサーを使用しないと、最終的に管理が難しくなります。

于 2012-10-03T17:31:05.960 に答える