2011-02-26 49 views
3

我想引用一段字符串作爲更大的正則表達式內的字符串,並且該表達式需要符合POSIX Extended Regular Expressions格式。如何在Java中爲POSIX擴展格式轉義正則表達式文本

這個問題是非常相似this existing question,除了答案了,不能使我滿意,因爲它提出了我使用Pattern.quote(),這依賴於特殊\Q\E標記 - 這些都是由Java的正則表達式的支持,但做符合到POSIX擴展格式。

例如,我想one.two變成one\.two而不是\Qone.two\E

回答

2

由Brian答案可以簡化爲

String toBeEscaped = "\\{}()[]*+?.|^$"; 
return inString.replaceAll("[\\Q" + toBeEscaped + "\\E]", "\\\\$0"); 

只有"one.two"測試。

+0

只適用於單個字符。 – 2011-03-01 12:01:00

+0

你是什麼意思?它適用於我可以隨身攜帶的所有示例。 – maaartinus 2011-03-01 12:05:23

+0

@Sean:它一次替換一個字符*,但是'replaceAll()'遍歷字符串中的所有字符。儘管如此,取代這個角色確實需要大量的代碼。我一直都是這麼做的@布賴恩的方式;它*非常容易閱讀。 – 2011-03-01 13:25:09

3

也許一些沿着這些路線:

// untested 
String escape(String inString) 
{ 
    StringBuilder builder = new StringBuilder(inString.length() * 2); 
    String toBeEscaped = "\\{}()[]*+?.|^$"; 

    for (int i = 0; i < inString.length(); i++) 
    { 
     char c = inString.charAt(i); 

     if (toBeEscaped.contains(c)) 
     { 
      builder.append('\\'); 
     } 

     builder.append(c); 
    } 

    return builder.toString(); 
} 
+0

方法名稱應該是小寫,這不是C#。否則:+1 – 2011-03-01 12:01:58

+0

@ Sean Patrick:公平點,我這幾天不會寫太多的Java :) – 2011-03-01 12:10:21

相關問題