[英]How to create a regex that matches a specific text outside quotes
我正在尋找有關創建正則表達式以替換以下格式的文本的幫助:
Replace the 3 words 'OR' and 'AND' and 'NOT' with '||', '&&' and '!' respectively.
But don't replace it if those 3 words appear somewhere within quotes.
例如,句子
PANDA OR THOR AND "NOTHING OR EVERYTHING" NOT THINKING
應該更改為
PANDA || THOR && "NOTHING OR EVERYTHING" ! THINKING
我正在使用Java API String.replaceAll(regex,replacement)替換文本。
編輯:我不是試圖在一個'replaceAll'語句中替換它們。 我將一次更換它們。 但是我正在尋找有關正則表達式的幫助以替換它們。
您不能在一個replaceAll
完成該操作,因為您只有一個替換項。 考慮使用正則表達式,它將找到您要替換的報價或零件。 然后檢查找到的匹配項是否不是引號,然后將其替換為所需的Matcher
(可以使用Matcher
以及它的appendReplacement
和appendTail
方法)。
所以你的代碼看起來像
Pattern p = Pattern.compile("\"[^\"]+\"|\\bAND\\b|\\bOR\\b|\\bNOT\\b");
// "quotes" AND OR NOT
Matcher m = p.matcher(text);
StringBuffer sb =new StringBuffer();
while(m.find()){
String match = m.group();
if (match.startsWith("\"")){//it is quotation, append it without changes
m.appendReplacement(sb, match);
}else if(match.equals("AND")){
m.appendReplacement(sb, "&&");
}else //...rest of your cases
}
m.appendTail(sb);
String result = sb.toString();
您需要編寫三個replaceAll
函數。
string.replaceAll("(?m)\\bOR\\b(?=(?:\"[^\"]*\"|[^\"])*$)", "||")
.replaceAll("(?m)\\bAND\\b(?=(?:\"[^\"]*\"|[^\"])*$)", "&&")
.replaceAll("(?m)\\bNOT\\b(?=(?:\"[^\"]*\"|[^\"])*$)", "!");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.