2011-01-24 49 views
6
strOutput.replace("/{{[^]*?}}/g",""); 

有沒有辦法將JavaScript正則表達式轉換爲Java安全正則表達式?如何將JavaScript的正則表達式轉換爲安全的Java正則表達式?

上面的語句給我的錯誤:

Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\)

我不是那麼熟悉的正則表達式,所以我可以使用一些指導。

謝謝!

+1

你可以發佈你創建的Java給你的錯誤嗎? – 2011-01-24 23:37:53

回答

11

擺脫正斜槓。你不需要Java中的那些。另外,Java的正則表達式並不能識別像/g/i這樣的開關;這些由常數在java.util.regex.Pattern中控制。

在Java世界中唯一有意義的Javascript正則表達式開關是/i/m。這些映射到Pattern.CASE_INSENSITIVEPattern.MULTILINE(您可以在從Pattern類創建正則表達式時使用這些開關,或者您可以將它們內聯使用 - 稍後我會進行介紹)。

/g不映射到任何內容,但您可以通過使用String.replaceAllString.replaceFirst來控制替換行爲。

爲了讓您的代碼工作,你必須做這樣的事情:

strOutput.replaceAll("{{[^]*?}}", ""); 

如果你想使用開關,你需要做的添加類似(?i)的正則表達式的開始。

您不能使用String.replace,因爲它爲CharSequence第一個參數,而不是一個正則表達式。

另請注意,String類提供的「快速正則表達式」方法可能無法像您期望的那樣工作。這是因爲,例如,當您指定一個模式(假設爲abc)作爲matches的正則表達式時,Java看到的實際模式爲^abc$。所以abc會匹配,但bc不會。

有更多信息here

0

您不需要/(在開始和結束時使用正斜槓)在JavaScript中用於內聯聲明而不是引號。

應該只是Regex r = new Regex("{{[^]*?}}");

1

獲取的開始和表達式的末尾擺脫"/""/g"。然後,您需要每隔"\"出現一次,如下所示:"\\"

「g」部分表示全局。這是控制在Java中使用正則表達式,而不是在正則表達式字符串中。

相關問題