2014-09-03 40 views
0

我主要使用Perl進行編碼,現在正在用Java中的正則表達式進行鬥爭。我有這個:返回的字符串中的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包含通配符(+)。我嘗試過[],但後來我有一個非法範圍( - )。

如何避免返回的字符串被解釋?

謝謝!

+1

如果您認爲'[]'可以幫助您閱讀正則表達式教程。 – Biffen 2014-09-03 10:48:06

+0

首先或者在最後一個內部字符類中放置符號'-'。 – 2014-09-03 10:52:58

回答

0

包裝你rs.getString()Pattern.quote

Pattern.quote(rs.getString("rs_name")) 

返回指定String的字面值模式String。

2

使用Pattern.quote(rs.getString("rs_name"))自動逃避控制字符。

當心null s。

0

您可以在您的字符串direclty中添加'\ Q'&'\ E'。

\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()方法。