2

次の文字列がいくつか出現するデータがあります。

<a href="default.asp?itemID=987">

itemIDは常に異なります。私はC#を使用しており、正規表現を使用してこれらすべてのitemIDを取得したいと考えています。

最初はこれを試しました

"<a href=\"default.asp?itemID=([0-9]*)\">"

ただし、疑問符は予約文字です。@演算子を使用して、文字のエスケープを無効にすることを検討しました。しかし、実際にエスケープする必要のある二重引用符がまだいくつかあります。だから私は

"<a href=\"default.asp\\?itemID=([0-9]*)\">"

これは(文字列として)次のように変換する必要があります

<a href="default.asp\?itemID=([0-9]*)">

しかし、Regex.Matchメソッドは成功しません。ここでまったく同じ正規表現を試しましたが、うまくいきました。私は何が間違っているのですか?

4

3 に答える 3

10

?および.は正規表現の特殊な文字ですが、文字列リテラルで「そのまま」エスケープすることはできません。したがって、 を入れる\と文字列として間違ってしまい、 を入れないと\\正規表現の「特殊文字」と見なされます。そう :

"@<a href=\"default\\.asp\\?itemID=([0-9]*)\">";
于 2012-05-30T15:00:44.327 に答える
7

@operator を使用すると、"" で二重引用符を取り戻すことができます。

また、正規表現の特定の特殊文字、この場合は文字 .\? をエスケープする必要があります。

これを試して:

@"<a href=""default\.asp\?itemID=([0-9]*)"">"
于 2012-05-30T14:54:11.350 に答える
1

ドット「.」をエスケープしてみてください。のキャラクター\.

于 2012-05-30T14:53:58.477 に答える