C#无法识别的转义序列
本文关键字:转义序列 识别 | 更新日期: 2023-09-27 18:11:07
我在C#上有以下Regex及其原因错误:'w
'.
'/
上的C#无法识别的转义序列。
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 处"结束">
有人能帮我吗?
使用@
文字时,使用""
转义引号。
这里有两种转义机制,它们相互干扰。例如,您使用'"
来告诉C#对以下双引号进行转义,但也使用'w
来告诉正则表达式解析器对以下W进行特殊处理。但是C#认为'w
是为C#准备的,却不理解它,并且会出现编译器错误。
例如,以文本为例:
<a href="file://C:''Test''Test2''[''w''.''/:]+">
有两种方法可以使C#接受它
一种方法是转义所有C#特有的字符。在这种情况下,"
用于表示字符串的末尾,'
表示C#转义序列。两者都需要以C#转义'
作为前缀来转义它们:
string s = "<a href='"file://C:''Test''Test2''[''w''.''/:]+'">";
但这通常会导致难看的字符串,尤其是在与路径或正则表达式一起使用时。
另一种方法是用@
作为字符串的前缀,并通过用""
:替换它们来仅转义"
string s = @"<a href=""file://C:'Test'Test2'['w'.'/:]+"">";
@
将阻止C#试图将字符串中的'
解释为转义符,但由于'"
届时也不会被识别,因此他们发明了""
来转义双引号。
这里有一个更好的正则表达式,您的正则表达式充满了问题:
string reg = @"<a href=""['w./:]+"" target=""_blank"">.?<img src=""(?<imgurl>['w./:]+)""";
Regex regex = new Regex(reg);
var m=正则表达式。匹配(@"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的结构不足以被regex捕获。但如果你需要快速而肮脏地完成一些事情,它就可以了。
交易如下。C#字符串将某些字符组合识别为操作字符串的特定特殊字符。例如,您可能熟悉在字符串中插入'n
以用作和行尾字符?当您将单个'
放入字符串中时,它将尝试将其与下一个字符一起验证为这些特殊命令之一,并且当其不是有效组合时会抛出错误。幸运的是,这并不能阻止您使用反斜杠,因为其中一个序列''
可以用于此目的,被解释为单个反斜杠。
因此,在实践中,如果用字符串中的每个反斜杠替换双反斜杠,它应该可以正常工作。