簡體   English   中英

如何檢查字符串是否為正則表達式

[英]How to check if the string is a regular expression or not

我有一個字符串。 如何檢查字符串是正則表達式還是包含正則表達式還是普通字符串?

您可以做的唯一可靠檢查是String是語法正確的正則表達式:

boolean isRegex;
try {
  Pattern.compile(input);
  isRegex = true;
} catch (PatternSyntaxException e) {
  isRegex = false;
}

但請注意,即使對於像Hello World這樣的字符串,這也會導致為trueI'm not a regex ,因為從技術上講它們是有效的正則表達式。

唯一會返回false是無效正則表達式的字符串,例如[unclosed character class or (unclosed group or +

這很丑陋但會檢測簡單的正則表達式(需要注意的是它們必須是為Java設計的,即具有相關的反斜杠字符轉義)。

public boolean isRegex(final String str) {
    try {
        java.util.regex.Pattern.compile(str);
        return true;
    } catch (java.util.regex.PatternSyntaxException e) {
        return false;
    }
}

“正常”刺痛和正則表達之間沒有區別。 正則表達式只是一個普通的字符串,用作匹配另一個字符串中模式的出現的模式。

正如其他人所指出的那樣,字符串可能不是有效的正則表達式,但我認為這是您可以做的唯一檢查。 如果它是有效的,則無法知道它是正則表達式還是普通字符串,因為它將是正則表達式

它只是一個普通字符串,由正則表達式引擎以特定方式解釋。

例如,“blah”是一個正則表達式,它只匹配字符串“blah”,它出現在另一個字符串中。

當以這種方式查看時,您可以看到正則表達式不需要包含任何執行更高級模式匹配的“特殊字符”,並且它只匹配模式中的字符串

也許你會嘗試使用Apache的regexp包( http://jakarta.apache.org/regexp/ )來編譯那個正則表達式,如果你得到一個例外,那么這不是一個有效的正則表達式,所以你會說這是正常的串。

boolean validRE = true;
try {
    RE re = new RE(stringToCheck);
} catch (RESyntaxException e) {
    validRE = false;
}

顯然,用戶會鍵入一個無效的正則表達式,並且您將其作為普通字符串處理。

如果有人只想區分純文本字符串和正則表達式:

static boolean hasSpecialRegexCharacters(String s){
    Pattern regexSpecialCharacters = Pattern
            .compile("[\\\\\\.\\[\\]\\{\\}\\(\\)\\<\\>\\*\\+\\-\\=\\!\\?
      \\^\\$\\|]");
     return regexSpecialCharacters.matcher(s).find();
}
/**
 * If input string is a regex, matches will always return a false.
 */ 
public boolean isRegex(final String str) {   
    return str != null ? !str.matches(str) : false;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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