我在 Racket 的手册中看到了以下结构:
(?‹tst›‹pces›|‹pces›) = Match 1st ‹pces› if ‹tst›, else 2nd ‹pces›
以及以下示例:
(regexp-match #rx"(?(?<=c)a|b)+" "cabal")
我不明白。这种正则表达式在哪种情况下可能有用?
conditional expression
这在 perl 中被调用。更清楚地写成
(?(condition)yes-pattern|no-pattern)
yes-pattern
如果condition
产生真值则匹配,否则no-pattern
匹配。缺失的模式总是匹配的。在此处查看 perl 文档以获取更多信息。(在此页面中搜索“条件”)此页面提供了几乎所有有用的谓词,但不包括示例。
另一个例子可以在这里找到。有两个示例,英语/欧洲日期格式和一个关于邮件标题的示例。
而这个来自gnome 开发者文档。(在此页面中搜索“条件子模式”)这里有几个示例。括号示例是经典示例,也可以在perl regexp 详细手册中找到。