我的理解是Regex公司。逃生通过自动将包含regex元字符的模式转换为该模式的“转义”版本,帮助生成regex模式。

所以如果你只想匹配美国广播公司不能将其用作模式,因为句点(或点)是一个正则元字符,恰好是一个通配符。Regex公司。Escape方便地将其转换为abc \.abc它可以用作正则表达式模式,不使用点作为通配符。

Regex公司。转义“转义”14个字符。。。

转义最小字符集(,*,+,?,|,{,[,(,),^,$,.、#和空白),将其替换为转义码。

然而,似乎只有12个字符不匹配。其他字符匹配他们自己。

. $ ^ { [ ( | ) * + ? \

这是指向引用的链接,引用中说有12个字符本身不匹配。

提出这一主张的确切措辞。。。

字符或序列列中列出的字符以外的字符在正则表达式中没有特殊含义;他们匹配自己。

区别在于Regex文档中提到的最后两个字符。逃逸,它们是空格和数字符号。为什么是Regex。转义支持12个以上不匹配的字符吗?

3个答案

重置为默认值
4

自由间距模式(Regex选项。忽略模式空白),#和空白不匹配:#开始注释,空白被忽略。

还有这张便条链接到的文档页面:

如果正则表达式模式包含数字符号(#)或文字空白字符,则如果使用Regex选项。忽略模式空白选项已启用。

例如,这完全等同于打印(“Loremipsum”):

(?x)打印\('Lorem ipsum'\)(?#内联注释)#注释

…当此匹配时“打印('Lorem ipsum')\n#注释”(\n个是实际的换行符):

(?x)打印\('Lorem\ipsum')(?#内联注释)\\\#\注释
1

简单的答案是,如果在regex中转义了空格和磅符号,它们的作用是一样的
无论是否忽略空白模式。

保留未转义,根据模式更改含义。

这个答案不需要正则表达式声明。

0
0

感谢@InSync让我意识到Regex选项。忽略模式空白选项。也要感谢@sln。这里有一个更长的答案。

文档中的12个元字符可以被描述为正常的元字符。原因是Regex。Escape支持额外的2个字符(空格和numberSign),因为当使用Regex选项。忽略模式空白,另外2个字符变为元字符。

在“正常”模式下,即没有Regex选项。忽略模式空白、numberSign和空白都是文字,也就是说,它们不是元字符。

Regex选项。忽略模式空白让您编写自我记录模式。具体来说,该选项允许引入不属于模式的空白,并在numberSign之后引入不属于该模式的注释。它有效地将空白变成了将被忽略的模式元字符。它有效地将numberSign转换为一个模式元字符,该元字符将被输入,随后的所有内容都将被忽略。我们引入了要忽略的字符,因为它们是文档。

使用此选项意味着您必须转义空白才能使其成为文字。使用此选项意味着您必须转义numberSign才能使其成为文字。

Regex r;r=新Regex(“a a a#comment”);//在正常模式下,空白为文字,numberSign为文字调试。断言(r.IsMatch(“aaa”)==false);调试。断言(r.IsMatch(“a a a#comment”);//在正常模式下,转义空格和转义numberSign是不必要的,但没有任何有害影响//解释。。。转义元字符意味着使其成为文字//在正常模式下,空白不是元字符,因此效果是取一个文本并使其成为文本,但没有效果//在正常模式下,numberSign不是元字符,因此其效果是采用文本并使其成为无效的文本r=新Regex(Regex.Escape(“a a a#comment”));调试。断言(r.IsMatch(“aaa”)==false);调试。断言(r.IsMatch(“a a a#comment”);r=新Regex(“a a a#comment”,RegexOptions.IgnorePatternWhitespace);//该选项使空白和注释变得无关紧要调试。断言(r.IsMatch(“aaa”));调试。断言(r.IsMatch(“a a a#comment”)==false);//转义空格和转义号由人工编码的转义序列签名r=新Regex(@“a\a\a\\#注释”,RegexOptions.IgnorePatternWhitespace);调试。断言(r.IsMatch(“aaa”)==false);调试。断言(r.IsMatch(“a a a#comment”));//使用Regex转义空白和转义numberSign。逃生r=新Regex(Regex.Escape(“a a a#comment”),RegexOptions。忽略模式空白);调试。断言(r.IsMatch(“aaa”)==false);调试。断言(r.IsMatch(“a a a#comment”));

旁白。。。启用另外两个元字符的选项让我想起了连字符。连字符不在由12个元字符组成的“正常”集合中,但连字符在方括号的上下文中变为元字符。

r=新Regex(“a-z[P-r]”);

第一个连字符是文字,第二个连字符定义了一个组,模式正好从中匹配一个字符。

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.