2012-12-03 77 views
0

我球拍(here)的手册中看到的结构如下:条件的正则表达式[球拍]

(?‹tst›‹pces›|‹pces›) = Match 1st ‹pces› if ‹tst›, else 2nd ‹pces› 

和下面的示例:

(regexp-match #rx"(?(?<=c)a|b)+" "cabal") 

我不理解它。在哪种情况下这种正则表达式可能有用?

+0

你不明白正则表达式的含义,或者你想要一个更好的用例吗? – halfelf

+0

我完全无法想象这种结构如何有用。 – alinsoar

+0

我认为其含义是:“如果表达式TST匹配,则尝试匹配下一个p1。其他p2。 >>。对 ?问题在于哪些情况有帮助。从来没有想过这样的建筑可能存在。 – alinsoar

回答

3

这在perl中被称为conditional expression。它是更加明确写为

(?(condition)yes-pattern|no-pattern) 

它匹配yes-pattern如果condition产生真正的价值,否则匹配no-pattern。缺失的模式总是匹配。查看perl文档以获取更多信息here。(在此页面搜索“条件”)该页面提供了几乎所有有用的谓词,但不包括示例。

另一个例子可以找到here。有两个例子,英文/欧洲日期格式和一个关于邮件标题的例子。

而这一个从gnome developer doc。(在此页面搜索“条件子模式”)这里有几个例子。圆括号的例子是一个经典的例子,它也可以在perl regexp detailed manual中找到。