我在Racket手册(here)中看到以下结构:
(?‹tst›‹pces›|‹pces›) = Match 1st ‹pces› if ‹tst›, else 2nd ‹pces›
以及以下示例:
(regexp-match #rx"(?(?<=c)a|b)+" "cabal")
我不明白。在哪种情况下,这种正则表达式可能有用吗?
答案 0 :(得分:3)
这在perl中称为conditional expression
。写作
(?(condition)yes-pattern|no-pattern)
如果yes-pattern
产生真值,则匹配condition
,否则匹配no-pattern
。丢失的模式始终匹配。检查perl doc以获取更多信息here。(在此页面中搜索“condition”)此页面提供几乎所有有用的谓词,但不包括示例。
可以找到另一个例子here。有两个例子,英文/欧洲日期格式和一个关于邮件标题。
这个来自gnome developer doc。(在本页中搜索“条件子模式”)这里有几个例子。括号示例是经典示例,也可以在perl regexp detailed manual中找到。