java中的Regexp问题

时间:2014-04-19 14:56:34

标签: java regex

所有

下面是模式匹配的伪代码,

当我将regexp和输入作为字符串文字传递时,我得到了有效的响应

matchPattern(Pattern.compile("^IN\\|Web\\|Track\\|Shop\\|","IN|Coy|")

Pattern ^IN\|Web\|Track\|Shop\| ,matched false  for IN|Coy

但是当从bean派生相同的正则表达式时,我得到错误的响应

Bean.PatternValue ="^IN\\|Web\\|Track\\|Shop\\|";

matchPattern(Pattern.compile(Bean.PatternValue ),"IN|Coy|")

Pattern ^IN\\|Web\\|Track\\|Shop\\| ,matched true  for IN|Coy|        

matchPattern执行以下操作。

Matcher matcher = pattern.matcher(value);
if (matcher.find()) {
    matched= true;
}

1 个答案:

答案 0 :(得分:0)

字符串文字中的

\\编码单个\,正则表达式解析器将其解释为以下|的转义符。因此,"^IN\\|Web\\|Track\\|Shop\\|"将匹配输入开头的文字文本IN|Web|Track|Shop|。我不确定这是不是你想要的,但听起来不太可能。

如果要匹配文字\,必须将其转义为模式中的\\,在将其写入字符串文字时必须再次转义。即,

"^(?:IN\\\\|Web\\\\|Track\\\\|Shop\\\\)"

或者:

"^(?:IN|Web|Track|Shop)\\\\"

我还在那里的单词周围添加了分组括号,以便^适用于所有单词,而不只是IN ...并删除尾随|以阻止它简单地匹配任何东西..再次,我不确定这是否是你想要的,但它是另一个可能的问题。