2012-12-26 137 views
2

我有一個StringBuilder對象,我用它來構建一個大的字符串,使用"\n"字符在StringBuilder對象分離的字符串,我怎麼能高效地構建周圍物體正則表達式,不要把串並做了循環?StringBuilder的和正則表達式解析

例如說我有以下的正則表達式:

private static final regexPattern = "(([a-z[1-9]]+)||([1-9[a-z]]+))" 

如果我有這樣的:

String[] myStringList = aStringList.split("\n"); 

我試圖建立一個使用regexPattern和myStringList每個字符串有效的正則表達式。

Pattern p = Pattern.compile(regexPattern + myStringList[i]); 

是否有無論如何做到這一點沒有把我的stringBuilder分成循環和檢查每個字符串?我能以某種方式在整個StringBuilder對象周圍構建一個大型模式嗎?

回答

3

這將建立一個大「或」正則表達式,你的投入,前期未決regexPattern到輸入字符串的各個部分:

String bigRegex = "(" + regexPattern + aStringList.replace("\n", ")|(" + regexPattern) + ")"; 

下面是一些代碼,顯示你會得到什麼:

public static void main(String[] args) { 
    String aStringList = "foo\nbar\nbaz"; 
    String bigRegex = "(" + regexPattern + aStringList.replace("\n", ")|(" + regexPattern) + ")"; 
    System.out.println(bigRegex); 
    // Pattern p = Pattern.compile(bigRegex); 
} 

輸出:

((([a-z[1-9]]+)||([1-9[a-z]]+))foo)|((([a-z[1-9]]+)||([1-9[a-z]]+))bar)|((([a-z[1-9]]+)||([1-9[a-z]]+))baz) 
+0

使用「\ n」分隔符構建一個字符串,如果我tryi的有效途徑ng在正則表達式中使用它? –

+2

不是特別的,但是如果你從一個文件得到你的輸入會很方便 - 編輯和維護這個文件很容易將每個正則表達式部分保存在一個單獨的行中。我認爲你在這裏是一個好主意。 – Bohemian