如何编写正则表达式来确定正则表达式是否合法?
例如,以 * 开头的正则表达式是非法的。所以正则匹配合法的正则表达式可能是[^\*]+[\s\S]*。
正则表达式旨在匹配正则语言,因为正则表达式不是,所以您无法实现这一点。您可能应该为此任务使用解析器。
但是,支持正则表达式的编程语言已经有一个内置的解析器,您可以通过尝试用您想要验证的模式实例化一个正则表达式来确定正则表达式是否有效。
例如,在 JavaScript 中,您可以执行以下操作:
function isValidRegex(regex) {
try {
new RegExp(regex)
}
catch (e) {
return false;
}
return true;
}
isValidRegex('*a'); //false
如果不使用递归(例如 PCRE)正则表达式,这是不可能的。所有可能的正则表达式的集合不是正则语言。