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

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

您可以做的唯一可靠检查是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; } } 

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

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

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

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

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

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

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

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

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