-1
的if-then-else結構允許測試是否匹配組參加了一個模式的正則表達式:反向引用的測試內容?
(?(2)then-pattern|else-pattern)
我想知道如果我能考什麼反向引用包含。
在我的情況下,反向引用的捕獲組由可選的子組組成(因此它總是參與,但它可以是空的),因此測試它是否爲空就足夠了,但是關於測試反向引用的更一般問題反對任何模式很有趣。
的if-then-else結構允許測試是否匹配組參加了一個模式的正則表達式:反向引用的測試內容?
(?(2)then-pattern|else-pattern)
我想知道如果我能考什麼反向引用包含。
在我的情況下,反向引用的捕獲組由可選的子組組成(因此它總是參與,但它可以是空的),因此測試它是否爲空就足夠了,但是關於測試反向引用的更一般問題反對任何模式很有趣。
您的問題的答案是,您可以測試以查看捕獲組是否參與了匹配,方法是使用一個非可選反向引用和備用可選反向引用(將覆蓋「空」 '變體)。
例如:
(A)B \ 1
將不匹配 'B' 作爲\ 1指的是一個捕獲組失敗而
(A)B? \ 1? 將匹配'b',因爲\ 1是可選的。
所以下面將是一個測試,看看第一個捕獲組爲空或不
b \ 1#做的第一圖案(:(一?)|???(A)B \ 1#做第二種模式)
你應該給示例測試字符串 - 我只能做第一個替代匹配對「aba#做第一個模式」,這是沒有用的。另外,我認爲第二個替代方案最好寫成「\ 1?b \ 1?#第二個模式」,如果可以捕獲和反向引用「b」,並且不需要重複,也可能會有所幫助。無論哪種方式,我不認爲這是行得通的,尤其是考慮到「a」可能是空的,它必須是「a?」之類的東西。這似乎阻止你的測試。更何況我不確定在匹配字符串上加上「b」是否可行或好風格。你有測試字符串的工作POC嗎? – messy
@messy我認爲你需要提供一個你想要完成的事情的例子。以上回答了你問的理論問題。如果您需要特定測試字符串的幫助,請在編輯時提供原始問題。 – JosephRuby