2014-01-08 55 views
1

我想寫一個正則表達式規則分隔(法,但一般的正則表達式應該沒問題),像下面這樣:正則表達式(LEX柔性):字符串由雙條

​​

字符串可以包含所有字符,但「||」符號。它可能包含'|'。

所以,基本上需要一個正則表達式來捕獲所有字符串,但「||」。但是,堅持這一步。

有人可以給我一個提示如何寫這樣的字符串的正則表達式嗎?

+0

你確定嗎?所以,如果你的輸入文件不包含'||',你需要一個字符串中的所有數據,但如果文件包含一個「||」,你需要第一個「||」之前的所有東西作爲字符串,和後面的所有東西,包括後面的'||',當然是第三個字符串(當然是用'||'作爲第二個字符串)?我認爲這不太可能,所以你應該更好地說明情況 - 可能。 –

+0

如果沒有「||」,那麼yacc會拒絕輸入。如果有兩個「||」,這也是一個錯誤。 – Nullptr

+0

你說得對。基本上我想要除了「||」之外的所有東西。在一般的字符串函數(C++或python)中,這將更容易。只需找到「||」。而已。但是,用RE做這件事有點棘手。 – Nullptr

回答

1

一個不包含||的字符串。可以被認爲是由單個字符組成的字符串集合,然後由豎線分隔。例如,像

ab|cd|ef|gh 
|ab|cd|ef 

等遵循此模式。這些字符串

  • 開始(可選地)具有一個非空字符串,
  • 然後由任何數量的豎線後跟一個非空字符串的拷貝的,並
  • 任選與豎線結束。

假設所允許的唯一的字符 「a」 和 「|」?,一個正則表達式,這是

(A +)(\ | A +)* \ |?

(我使用\ |代表|字符,因爲它需要被轉義)。我認爲你可以通過將這個正則表達式的兩個副本與「||」相連來爲你的整體需求編寫一個正則表達式,在中間。

希望這會有所幫助!

+0

這是非常有用的評論。我正在嘗試。 – Nullptr