如何检查字符串是否是正则表达式

时间:2011-06-14 09:08:22

标签: java regex

我有一个字符串。我如何检查字符串是正则表达式还是包含正则表达式,或者它是普通字符串?

5 个答案:

答案 0 :(得分:17)

唯一可靠的检查是String是语法正确的正则表达式:

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

但请注意,即使对于trueHello World等字符串,这也会导致I'm not a regex,因为从技术上讲,它们是有效的正则表达式。

这将返回false的唯一情况是无效正则表达式的字符串,例如[unclosed character class(unclosed group+

答案 1 :(得分:4)

这很丑陋,但会检测简单的正则表达式(需要注意的是它们必须是为Java设计的,即有相关的反斜杠字符转义)。

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

答案 2 :(得分:1)

“正常”刺痛和正则表达之间没有区别。正则表达式只是一个普通的字符串,用作匹配另一个字符串中模式出现的模式。

正如其他人所指出的那样,字符串可能不是有效正则表达式,但我认为这是您可以做的唯一检查。如果它有效则无法知道它是正则表达式还是普通字符串,因为它将是正则表达式

它只是一个普通字符串,由正则表达式引擎以特定方式解释。

例如“blah”是一个正则表达式,它只匹配字符串“blah”,而不管它出现在另一个字符串中。

当以这种方式查看时,您可以看到正则表达式不需要包含任何执行更高级模式匹配的“特殊字符”,并且它只匹配模式中的字符串

答案 3 :(得分:1)

也许你会尝试使用来自Apache(http://jakarta.apache.org/regexp/)的regexp包编译该正则表达式,如果你得到一个异常,那么这不是一个有效的正则表达式,所以你会说它是一个普通的字符串。

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

显然,用户会键入一个无效的正则表达式,并且您将其作为普通字符串处理。

答案 4 :(得分:-3)

/**
 * 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;
}