簡體   English   中英

如何創建與引號外的特定文本匹配的正則表達式

[英]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以及它的appendReplacementappendTail方法)。

所以你的代碼看起來像

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM