2016-05-18 119 views
1

我需要在C#中創建一個程序,將中綴表達式轉換爲前綴和後綴,將前綴表達式轉換爲後綴和中綴,將後綴表達式轉換爲中綴和前綴。但這不是問題,程序的「處理部分」已經完成。正則表達式驗證前綴,中綴和後綴表達式

我現在需要的是一個正則表達式來驗證用戶輸入是中綴,前綴還是後綴表達式,所以根據輸入我調用不同的函數來執行轉換。

的投入將永遠是:
操作數:大寫單字母從A到Z
對於運營商:+, - ,*,/和

對於中綴表達我做了這個正則表達式(這似乎工作正常):
"^(([A-Z])(([+]|[-]|[*]|[/])([A-Z]))*)$"

但我熄滅了我的想法,試圖爲前綴和後綴表達式進行正則表達式。我在網上也沒有發現任何東西。

有人能給我一個燈嗎?

+0

如果我理解正確,模式將只用於找出正在使用的符號,那麼不需要捕獲捕獲組中的表達式的任何部分?此外,它的目的是你的模式不允許任何空格?前綴表示應該看起來像是「+ AB」還是「+ A B」? –

+0

@Rawing嗨。是的,我只需要找出正在使用的符號。它不應該有空格,所以我正在考慮'+ AB'而不是'+ A B'。 –

回答

0

不幸的是,這是不可能的,沒有遞歸正則表達式(C#不支持)。雖然(格式良好的)中綴表示法可以與簡單的正則表達式[A-Z](?:[*/+-][A-Z])*相匹配,但是前綴和後綴表示法並不遵循這樣一個簡單模式,以至於它們可以通過非遞歸正則表達式匹配。這就是說,確定表達式是否使用前/後綴表示法(不驗證其正確性)的一種非常簡單的方法是檢查第一個/最後一個字符是否爲運算符:^[*/+-]將匹配格式正確的前綴表達式和.*[*/+-]$格式正確的後綴表達式。

+0

嘿,你知道它將如何使用遞歸正則表達式嗎? –

+0

@MatheusSousa:(?(DEFINE)(? [AZ])(? [* \/+ - ](?&expr)(?&expr))(?(?&number)|(?&op)| \ (??expr)(??expr)))(?&expr)'爲前綴,'(?(DEFINE)(? [AZ])(?(?&expr)(?&expr)[* \/+ - ]) ???????(?&expr)'爲後綴。??(?&number)|(?&op)| \((?&expr)\))) (兩種模式都允許使用圓括號,如果你不想這樣做,請移除'| \((?&expr)\)'部分。) –