2016-12-15 64 views
-1

的if-then-else結構允許測試是否匹配組參加了一個模式的正則表達式:反向引用的測試內容?

(?(2)then-pattern|else-pattern) 

我想知道如果我能考什麼反向引用包含。

在我的情況下,反向引用的捕獲組由可選的子組組成(因此它總是參與,但它可以是空的),因此測試它是否爲空就足夠了,但是關於測試反向引用的更一般問題反對任何模式很有趣。

回答

0

您的問題的答案是,您可以測試以查看捕獲組是否參與了匹配,方法是使用一個非可選反向引用和備用可選反向引用(將覆蓋「空」 '變體)。

例如:

(A)B \ 1

將不匹配 'B' 作爲\ 1指的是一個捕獲組失敗而

(A)B? \ 1? 將匹配'b',因爲\ 1是可選的。

所以下面將是一個測試,看看第一個捕獲組爲空或不

b \ 1#做的第一圖案(:(一?)|???(A)B \ 1#做第二種模式)

+0

你應該給示例測試字符串 - 我只能做第一個替代匹配對「aba#做第一個模式」,這是沒有用的。另外,我認爲第二個替代方案最好寫成「\ 1?b \ 1?#第二個模式」,如果可以捕獲和反向引用「b」,並且不需要重複,也可能會有所幫助。無論哪種方式,我不認爲這是行得通的,尤其是考慮到「a」可能是空的,它必須是「a?」之類的東西。這似乎阻止你的測試。更何況我不確定在匹配字符串上加上「b」是否可行或好風格。你有測試字符串的工作POC嗎? – messy

+0

@messy我認爲你需要提供一個你想要完成的事情的例子。以上回答了你問的理論問題。如果您需要特定測試字符串的幫助,請在編輯時提供原始問題。 – JosephRuby