4

私は C# で次の正規表現を使用しており、その原因となるエラー: C# Unrecognized escape sequence on \w \. \/ .

string reg = "<a href=\"[\w\.\/:]+\" target=\"_blank\">.?<img src=\"(?<imgurl>\w\.\/:])+\"";
Regex regex = new Regex(reg);

私も試しました

string reg = @"<a href="[w./:]+" target=\"_blank\">.?<img src="(?<imgurl>w./:])+"";

しかし、このように文字列は href=" "-charで「終了」します

誰でも私を助けてもらえますか?

4

4 に答える 4

10

リテラルを使用""するときに引用符をエスケープするために使用します。@

于 2013-04-25T22:36:23.497 に答える
4

ここでは 2 つのエスケープ メカニズムが機能しており、それらが干渉しています。たとえば\"、次の二重引用符をエスケープするように C# に指示するために使用しますが\w、次の W スペシャルを処理するように正規表現パーサーに指示するためにも使用します。しかし、C# は C#\w向けであると考え、それを理解せず、コンパイラ エラーが発生します。

たとえば、次のテキスト例を見てください。

<a href="file://C:\Test\Test2\[\w\.\/:]+">

C# が受け入れるようにエスケープするには、2 つの方法があります。

1 つの方法は、C# に固有のすべての文字をエスケープすることです。この場合、"は文字列の末尾を示すために使用され\、C# エスケープ シーケンスを示します。エスケープするには、両方に C# エスケープをプレフィックスとして付ける必要があり\ます。

string s = "<a href=\"file://C:\\Test\\Test2\\[\\w\\.\\/:]+\">";

しかし、これは多くの場合、特にパスや正規表現で使用すると、見苦しい文字列になります。

もう 1 つの方法は、文字列の前に を付け、それらを に置き換えることで@、 のみをエスケープすることです。"""

string s = @"<a href=""file://C:\Test\Test2\[\w\.\/:]+"">";

は、C#が文字列内の をエスケープ文字として解釈しようとするの@を防ぎますが、認識されないため、二重引用符をエスケープするために を発明しました。\\"""

于 2013-04-26T01:45:38.910 に答える
3

これはより良い正規表現です。あなたのものには問題がたくさんあります:

string reg = @"<a href=""[\w./:]+"" target=""_blank"">.?<img src=""(?<imgurl>[\w./:]+)""";
Regex regex = new Regex(reg);

var m = regex.Match(@"http://www.yahoo.com"" target=""_blank"">http://flickr.com/something.jpg""");

キャッチし<a href="http://www.yahoo.com" target="_blank"><img src="http://flickr.com/something.jpg"ます。あなたの問題: スラッシュをエスケープする必要はありません。img 部分に [ ブラケットがなく)、グループの最後に適切な位置に配置されています。

ただし、何度も言われているように、HTML は正規表現でキャッチできるほど構造化されていません。しかし、何か手っ取り早く汚いものを仕上げる必要がある場合は、それで十分です。

于 2013-04-25T23:04:48.830 に答える