[英]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
這樣的字符串,這也會導致為true
, I'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.