2013-01-08 85 views
-3
BEGIN A B C END | A B C 

以上的regexp應該匹配任一BEGIN A B C ENDA B C不受BEGIN和END包圍。在A後假設的存在,而在(?<ImAfterTheA>A)使用一組命名一樣,在Java中,你需要給第一個A不同的組名比第二A.「(」 A B C 「)」 或A B C - 匹配均衡包裝或沒有正則表達式

BEGIN (?<ImAfterTheA_1>A) B C END | (?<ImAfterTheA_2>A) B C 

所以...我想縮短這個來到了:

BEGIN? A B C END? 

但話又說回來,這將匹配A B CBEGIN A B CA B C ENDBEGIN A B C END,有效匹配比我預期的更大的語言。

我可以在不擴大語言的情況下將其更加簡潔,從而避免匹配組的兩個不同的組名稱?

+5

我真的不明白你的問題。 – Juvanis

+0

這個問題幾乎沒有意義。更加詳細一些。 –

+0

你的第二個正則表達式沒有做你認爲應該做的事。 –

回答

0

此正則表達式做什麼,我想你想:

(BEGIN A B C END)| ((?<!BEGIN) A B C (?!END)) 

這要麼BEGIB和END匹配在兩端沒有開始或終止在兩端。換句話說,如果其中一個包裝紙存在,則兩者都必須存在。

  • BEGIN A B C END比賽
  • foo A B C END敵不過
  • BEGIN A B C foo沒有匹配
  • foo A B C bar比賽
+1

這比'(BEGIN A B C END)|(A B C)'更好嗎?更具體地說(每個操作者的請求)它如何*更簡潔*? – Madbreaks

+0

@Madbreaks更好,因爲它不會匹配'BEGIN A B C foo' – Bohemian

+0

我也沒有,對不對? – Madbreaks

相關問題