我主要使用Perl进行编码,现在正在努力使用Java中的正则表达式。我有这个:
// String dbfPath = "/result_feature/Monocytes-CD14+_H3K4me3_ENCODE_UW_bwa_samse"
// rs.getString = "Monocytes-CD14+_H3K4me3_ENCODE_UW_bwa_samse"
if(! dbfPath.matches(".*" + rs.getString("rs_name") + "/*"))
我的问题是rs_name包含通配符(+)。我试着把[]放在一边,但后来我有一个非法范围( - )。
如何避免解释返回的字符串?
谢谢!
答案 0 :(得分:2)
使用Pattern.quote(rs.getString("rs_name"))
自动转义控制字符。
小心null
s。
答案 1 :(得分:1)
您可以使用java.util.regex.Pattern.qoute()
:
if(! dbfPath.matches(".*" + java.util.regex.Pattern.qoute(rs.getString("rs_name") ) + "/*"))
答案 2 :(得分:0)
将rs.getString()
换成Pattern.quote
:
Pattern.quote(rs.getString("rs_name"))
返回指定String的文字模式String。
答案 3 :(得分:0)
您可以添加' \ Q' &安培; ' \ E'在你的字符串direclty中。
\Q Nothing, but quotes all characters until \E
\E Nothing, but ends quoting started by \Q
if(! dbfPath.matches(".*\\Q" + rs.getString("rs_name") + "\\E/*"))
有一件事,你应该确保你的字符串不包含' \ E'如果是,安全的方法是使用Pattern.quote()方法。