日期:2014-05-17  浏览次数:20587 次

请教一个正则表达式中用转义字符的疑惑
我在web.xml文件下配置
XML code

         <init-param>
          <param-name>pattern</param-name>
          <param-value[color=#FF0000]>.*\\.do$|.*\\.jsp$[/color]</param-value>
      </init-param>



参数值通过filterConfig拿出来怎么是.*\\\\.do$|.*\\\\.jsp$啊,为什么会出现这种情况,但是你后台打印的话它会帮你转义出来所以你看到的是.*\\.do$|.*\\.jsp$ 这样问题就出来了,我开始不知道是这个情况,

然后我就拿去匹配当然和我预想的结果不一样,匹配不上。那么怎样解决这个问题了,当然可以直接在文件中写死不去传,
如果还是想通过传参数该怎么解决,谢谢大侠们的指教啊

------解决方案--------------------
首先在web.xml中的,

要表达.do,要用'\'来转义'.' 所以变成 ‘\.do’ 但 ‘\’在正则里也是有特殊意义的,也需要'\' 转义一下,所以最终变成'\\.do' 

在java类里,‘\’也需要转义,'\\' 表示 一个 '\' 。所以要表示两个'\',就需要四个'\'
------解决方案--------------------
<param-value>.*\.(?:do|jsp)$</param-value>

写成这样就可以了