正则表达式转义

上一篇 / 下一篇  2012-11-09 09:59:02

正则表达式在我们的开发过程中还是比较经常用到的,就我们项目组而言,正则表达式主要应用于以下几个方面:

Ø Java代码中(包含数据库中存储参数的校验规则);

Ø JavaScript代码中;

当正则表达式中有特殊字符需要转义时,就需要使用反斜杠“\”来对特殊字符进行转义了,问题是到底用单个反斜杠还是双反斜杠,这一点是我们容易混淆的,下面就从以上两个方面来进行简要的说明。

一、Java代码中的使用

我们在Java代码中主要通过两种方式使用正则表达式:一种是将一个正则表达式直接赋值给一个String变量;另外一种就是将正则表达式存于数据表中,通过Java代码读取数据库并进行校验;

   对于第一种方式,当我们需要对特殊字符进行转义时,需要使用双反斜杠“\\”,例子如下(以IP校验规则为例):

String testStr = "0.1.2.3";

String regx =

"^((0|[1-9][0-9]?|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\.(0|[1-9][0-9]?|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}(/(8|16|24|32))?)$";

Pattern p = Pattern.compile(regx);

Matcher m = p.matcher(testStr);

在以上代码中,双斜杠“\\”对特殊字符“.”(英文句点)进行了转义。

   对于第二种方式,存于数据表中的正则表达式,如果需要对特殊字符转义,则需要使用单反斜杠“\”,例如我们在数据库中查看参数sysRequestAuthIP的校验规则:

上面存于数据表中的正则表达式中,使用单反斜杠“\”分别对特殊字符“.”(英文句点)和“|”(竖线)进行了转义。

二、JavaScript代码中的使用

   JavaScript代码中,我们一般也会主要通过两种方式使用正则表达式:一种是使用RegExp对象,另外一种方式是使用/xxx/这种方式。

   对于第一种方式,如果正则表达式中有特殊字符需要转义,则需要使用双反斜杠“\\”,例子如下(以IP校验规则为例):

var str = "0.1.2.3";

var reg =

"^((0|[1-9][0-9]?|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\.(0|[1-9][0-9]?|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}(/(8|16|24|32))?)$";

var exp = new RegExp(reg);

alert(exp.test(str));

在以上JavaScript代码中,使用RegExp对象编译含特殊字符的正则表达式时,是使用双反斜杠“\\”对特殊字符“.”(英文句点)进行转义的。

   对于第二种方式,如果需要对特殊字符进行转义,则需要使用单反斜杠“\”,例如(以IP校验规则为例):

var str = "0.1.2.3";

var reg =

/^((0|[1-9][0-9]?|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.(0|[1-9][0-9]?|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}(\/(8|16|24|32))?)$/;

alert(reg.test(str));

在以上代码中,使用单反斜杠“\”分别对“.”(英文句点)和“/”(正斜杠)进行了转义。

   以上内容是对之前所修改的校验规则问题进行的简单总结,另外,顺便提一下在Linux指令中替换字符串时,如果字符串中含特殊字符,是需要使用单反斜杠“\”对特殊字符进行转义的。比如我们在搭建ISap平台的管理Portal修改配置文件persistence.ext.xml${PORTAL_HOME}/conf/server目录下)中的密码时,如果密码中含特殊字符,我们就需要使用单反斜杠“\”对特殊字符进行转义:

在上面的替换指令中,密码u9dFQ/RLv4dPWtA+V7tWfQ==中的特殊字符“/”就是使用单反斜杠“\”进行转义的。


TAG:

 

评分:0

我来说两句

日历

« 2024-04-09  
 123456
78910111213
14151617181920
21222324252627
282930    

我的存档

数据统计

  • 访问量: 37957
  • 日志数: 18
  • 建立时间: 2012-11-06
  • 更新时间: 2012-11-20

RSS订阅

Open Toolbar