2012-12-03 79 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中找到。