时间:2021-05-18
1 概述
这或许会是一个让人迷惑,甚至感到混乱的话题,但也正因为如此,才有了讨论的必要。
在正则中,一些具有特殊意义的字符,或是字符序列,被称作元字符,如“?”表示被修饰的子表达式匹配0次或1次,“(?i)”表示忽略大小写的匹配模式等等。而当这些元字符被要求匹配其本身时,就要进行转义处理了。
不同的语言或应用场景下,正则定义方式、元字符出现的位置不同,转义的方式也是林林总总,不一而同。
2 .NET正则中的字符转义
2.1 .NET正则中的转义符
绝大多数语言中,“\”都被作为转义符,用来转义一些具有特殊意义的字符或字符序列,比如“\n”表示换行,“\t”表示水平制表符等。而这样的转义,应用到正则中,又会有一些意想不到的变化。
话题由C#中一个正则问题引出
复制代码 代码如下:
string[] test = new string[]{"\\", "\\\\"};
Regex reg = new Regex("^\\\\$");
foreach (string s in test)
{
richTextBox2.Text += "源字符串: " + s.PadRight(5, ' ') + "匹配结果: " + reg.IsMatch(s) + "\n";
}
对于这个结果,或许有人会感到迷惑,字符串中的“\\”不是代表一个经过转义的“\”字符吗?而“\\\\”不就应该代表两个经过转义的“\”字符吗?那么上面正则匹配的结果应该是第一个为False,第二个为True才对啊?
对于这一问题,直接解释或许不太容易理解,还是换种方式来解释吧。
比如要匹配的字符是这样的
string test = "(";
那么正则如何写呢?因为“(”在正则中是有特殊意义的,所以写正则时必须对它进行转义,也就是“\(”,而在字符串中,要使用“\\” 来表示“\”本身,也就是
Regex reg = new Regex("^\\($");
这个如果理解了,那再把“(”换回“\”,同样道理,在字符串中,要使用“\\” 来表示“\”本身,也就是
Regex reg = new Regex("^\\\\$");
通过这样的分析,可以看出,其实在以字符串形式声明的正则中,“\\\\”匹配的实际上就是单独的一个“\”字符。总结一下它们之间的关系:
输出到控制台或界面的字符串:\
程序中声明的字符串:string test = "\\";
程序中声明的正则:Regex reg = new Regex("^\\\\$");
这样解释是不是已经可以理解了,那么是不是感觉这样很笨拙?是的,在程序中以字符串形式声明的正则,涉及到转义符时就是这样笨拙的。
所以在C#中,还提供了另一种字符串声明方式,在字符串前加个“@”,就可以忽略转义。
复制代码 代码如下:
string[] test = new string[] { @"\", @"\\" };
Regex reg = new Regex(@"^\\$");
foreach (string s in test)
{
richTextBox2.Text += "源字符串: " + s.PadRight(5, ' ') + "匹配结果: " + reg.IsMatch(s) + "\n";
}
这样就简洁多了,也符合通常的理解。
但同时也带来另一个问题,就是双引号的转义处理。在普通的字符串声明中,可以用“\””对双引号进行转义。
string test = "<a href=\"pile(reg).matcher(test[i]).find());
}
只能期待Java的后续版本能提供这方面的优化了。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
python正则表达式匹配反斜杠正则需要把原始字符串不被转义的条件下传递给正则模块,正则再去转义。r表示r后面的字符串为原始字符串,防止计算机将\理解为转义字符
Python中转义字符正则表达式使用反斜杠”\“来代表特殊形式或用作转义字符,这里跟Python的语法冲突,因此,Python用”\\\\“表示正则表达式中的”
正则需要转义字符'$','(',')','*','+','.','[',']','?','\\','^','{','}','|'异常现象:java.ut
本文实例讲述了Python使用正则表达式过滤或替换HTML标签的方法。分享给大家供大家参考,具体如下:python正则表达式关键内容:python正则表达式转义
前言在java中,反斜杠“\”转义是“\”,因此表示一个“\”要使用“\\”,如果是正则表达式,那么表示一个“\”需要用“\\\\”,在mysql中,反斜杠转义