所有
下面是模式匹配的伪代码,
当我将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;
}
答案 0 :(得分:0)
\\
编码单个\
,正则表达式解析器将其解释为以下|
的转义符。因此,"^IN\\|Web\\|Track\\|Shop\\|"
将匹配输入开头的文字文本IN|Web|Track|Shop|
。我不确定这是不是你想要的,但听起来不太可能。
如果要匹配文字\
,必须将其转义为模式中的\\
,在将其写入字符串文字时必须再次转义。即,
"^(?:IN\\\\|Web\\\\|Track\\\\|Shop\\\\)"
或者:
"^(?:IN|Web|Track|Shop)\\\\"
我还在那里的单词周围添加了分组括号,以便^
适用于所有单词,而不只是IN
...并删除尾随|
以阻止它简单地匹配任何东西..再次,我不确定这是否是你想要的,但它是另一个可能的问题。