有没有可能编写一个匹配正则表达式的正则表达式? 有人有例子吗? 如果存在某些理论上的障碍,是否有人知道一种至少可以匹配最常见的正则表达式模式的正则表达式?
有没有可能编写一个匹配正则表达式的正则表达式? 有人有例子吗? 如果存在某些理论上的障碍,是否有人知道一种至少可以匹配最常见的正则表达式模式的正则表达式?
正则表达式不是常规语言,因此不能用常规表达式来描述它!
更新:更有用的实用答案
您无法使用任何正则表达式来检测有效的正则表达式。要检测其有效性,只需使用正则表达式库解析字符串,如果它是无效的正则表达式,则会失败。例如,在Java中,可能会像这样:
boolean isValidRegexp(String s) {
try {
Pattern.compile(s);
return true;
} catch (Exception e) {
return false;
}
}
这种技术几乎适用于任何语言。
你们都错了!在我的秘密实验室里,我的邪恶科学家发现了可以匹配任何正则表达式的正则表达式:
.*
它甚至可以匹配空表达式。看看你能否匹配那个!
作为额外的好处,它甚至可以匹配非正则表达式的字符串。
使用标准正则表达式无法实现。
正则表达式可以无限嵌套 (例如,/(a(b(c(d))))/
),这是使用标准正则表达式无法匹配的。
/\/(\\[^\x00-\x1f]|\[(\\[^\x00-\x1f]|[^\x00-\x1f\\\/])*\]|[^\x00-\x1f\\\/\[])+\/[gim]*/
开始吧:
m{/([^\\/]++|\\.)/}
应该匹配由//
分隔的正则表达式。
当然,它并不能确保正则表达式被正确解析 - 它只是标识了它所在的位置(例如,用于令牌化器)。
/\/([^\\\/]++|\\.)\//
,它就可以了。如果你真的想要,我可以制作一个匹配任何m//
分隔符集的工具。 - Anon.是的。例如:这个正则表达式^[a-z][+*]$
将匹配这个正则表达式z+
,以及a*
和c+
等等。
这是不可能的。正则表达式只能匹配正则语言。正则表达式本身并不是一个正则语言。如果我没记错的话,它们属于上下文无关语言,并需要上下文无关文法来进行匹配。
.*
可以很好地匹配正则表达式。 - Tim Pietzcker.*
将匹配a(((
,这不是正则表达式。 - Yaakov Shoham.*
仅匹配有效的正则表达式,这也不是问题的关键,对吧? :) - Tim Pietzcker