在Java程序界定,我想找出這些子給定的字符串中所有出現:$$或$ \ d(符號「$」後跟一個整數)。匹配字符串中的某些關鍵字不是由某些字符
我的問題開始時,我增加了一個額外的限制,指出只有在匹配字符串不是由某些字符序列限制的子串的一部分發生匹配。
例如,我想忽略匹配,如果它們是由「/ {」和「/}」所包圍的字符串的一部分。
以下示例將帶出所有出現的$$或$ \ d,但不考慮忽略匹配的附加約束(如果它位於「/ {」和「/}」內部)。
public static final String PARAMETERS_PREFIX = "$";
public static final String ALL_PARAMS_SUFFIX = "$";
public static final String BEGIN_JAVA_EXPRESSION = "/{";
public static final String END_JAVA_EXPRESSION = "/}";
...
String test = "$1 xxx $$ " //$1 and $$ are matches
+ BEGIN_JAVA_EXPRESSION + "xxx $2 xxx" + END_JAVA_EXPRESSION; //$2 SHOULD NOT be a match
Set<String> symbolsSet = new LinkedHashSet<String>();
Pattern pattern = Pattern.compile(Pattern.quote(PARAMETERS_PREFIX)+"(\\d+|"+Pattern.quote(ALL_PARAMS_SUFFIX)+")");
Matcher findingMatcher = pattern.matcher(test);
while(findingMatcher.find()) {
String match = findingMatcher.group();
symbolsSet.add(match);
}
return new ArrayList<String>(symbolsSet);
除了發現不能確定的子部分的關鍵字,我希望能夠通過一定值後只更換這些關鍵字。 然後,在進行匹配之前刪除分隔字符之間的所有內容的選項可能無濟於事,因爲之後我需要能夠獲取原始字符串,並將匹配的標記替換爲某些值,並且分隔區域內的標記應該留下未經修改。 這應該很容易,如果我找到了正確的正則表達式。
是否有人可以給我一個關於如何編寫正確的正則表達式這個問題的暗示?
+1謝謝您的回答@ControlAltDel。然而,我忘了在問題中說,以後我需要用其他值替換匹配的字符串(我剛剛更新了它)。我認爲只有一個正則表達式是理想的。不知道如何找到我使用多個正則表達式的關鍵字。 – Sergio
我沒有看到如何找到使用我建議的3個正則表達式的位置比使用1個正則表達式更復雜。但你知道你的問題比我更好... – ControlAltDel
我想說的是,我正在尋找一個正則表達式,我可以使用它們來查找匹配,以及之後替換某些值的標記。所以我可以做一些像test.replaceAll(「killerRegex」,「newValue」)。 「killerRegex」將忽略周圍區域的匹配。 – Sergio