2011-08-18 215 views
2

正则表达式模式的正则表达式模式是什么?我使用的是Ruby 1.8.7版本,并且需要确定给定的字符串是否是正则表达式模式。用什么来确定这个最好的模式?正则表达式模式的正则表达式模式是什么?

感谢, 阿南德

+0

我不是100%肯定,但我认为这已经问了Ruby的正则表达式。 –

回答

6

以及任何字都可以是正则表达式模式。字符串“猫”可以被编译为正则表达式模式。你可以这样做:

def is_regex?(str) 
    Regexp.new(str) rescue false 
end 
+0

有些字符串是无效的 - 例如,对于任何正则表达式引擎,'/(/'不是一个有效的正则表达式,默认情况下圆括号是特殊的(这是大多数)。 – Amber

+1

这是我做Regexp的一点。新..这将尝试在str上编译或抛出一个异常,如果它不能编译并返回false ..你说这不会工作? –

+0

这是唯一的理智的方式:) – porges

2

没有之一,因为正则表达式本身是不是一个正规语言(由于像匹配的括号内)。

如果要确定的东西是否是有效的正则表达式,我建议你只是想编译为正则表达式,看看它是否失败。

+0

你很困惑。人们称之为正则表达式的东西完全能够匹配非常规语言的东西,包括匹配的括号等。 – tchrist

+0

嵌套括号不是大多数正则表达式风格处理很好。是的,有递归正则表达式引擎(如Perl的递归引用),但与使用实际的正则表达式解析器相比,它们确实是一个糟糕的选择。 – Amber

0

假设正则表达式模式是有两个前锋的字符串斜线,/定义模式,那么正则表达式找到两个盼着模式在开始斜线和模式的结束是如下:

(\/(?:.)*\/(?:i|g|s|m|U)*)

+0

这看起来很合理。为什么它低调? –

+0

@David:这个正则表达式需要匹配的是两个正斜杠;其他一切都是可选的。这甚至不足以识别正则表达式* literal,并且正则表达式也可以以字符串文字(不含斜杠)的形式编写。我不清楚OP是否正在尝试查找正则表达式或验证它们,但是这个正则表达式都没有。 –

+0

@Alan:我只是举了一个例子,如果正则表达式是字面定义的,因为这是我看到可能通过正则表达式找到正则表达式的唯一方法。 – escproxy