我有一個包含大量運算符,變量和英語單詞的文本輸入。從這個輸入我必須單獨分離所有操作員。匹配運算符
截至目前我正在使用正則表達式匹配,所以匹配的運算符的數量取決於正則表達式。我得到的問題是'=與< ='匹配,'&與& &'匹配。我需要分別匹配=和< =。
有沒有更好的方法來匹配除正則表達式之外的其他操作符?
我有一個包含大量運算符,變量和英語單詞的文本輸入。從這個輸入我必須單獨分離所有操作員。匹配運算符
截至目前我正在使用正則表達式匹配,所以匹配的運算符的數量取決於正則表達式。我得到的問題是'=與< ='匹配,'&與& &'匹配。我需要分別匹配=和< =。
有沒有更好的方法來匹配除正則表達式之外的其他操作符?
可能有。但是,作爲替代,你可以有你的正則表達式爲(例如):
[><=&|]+
(修改您的要求 - 不知道,如果你想加,減,++
用於增加等也是如此)。
的+
的意思是「一個或多個」等正則表達式儘可能多的字符可能的匹配,這意味着如果<=
是文本,它將匹配<=
而不是<
然後=
。
然後,只有當你已經提取的所有比賽中,遍歷所有這些,把它們歸類。
我想你可能仍然能夠得到正則表達式來做你想做的事情。
如果你想完全放棄它,請原諒我,如果你想使用正則表達式來檢測只是 =那麼你可以使用[^<>=]=[^<>=]
無視我的建議:)
這意味着「只有在符合平等它不會在<>或其他=之前或分開。
您可以使用{1}&
並符號來檢測一個(且只有一個)&符號。
(NB您可能需要逃避一對夫婦這些符號與\
)
我希望可以幫助。祝你好運。
K.
對不起,如果我不清楚這個問題。我需要匹配=和<=分離。 as =是賦值運算符,<=是相關的。我需要匹配它們並保持它們的功能。 – gout 2012-03-12 05:46:33
當然,在這種情況下,您可以爲每個操作員分別設置一個正則表達式,以查看它是否匹配。一個用於=,一個用於<=等 – 2012-03-12 05:54:59
至於正則表達式的話,你可以有圖案的特殊(化合物)的情況下先匹配,那麼包羅萬象的最後一個簡單的交替。在您的簡單輸入案例中:/<=|&&|=|&/
。這並不一定是可怕的,你仍然可以把任何你包羅萬象的是之後:/special1|...specialN|special-chars-catch-all/
其中一個貪婪的表情只會讓整個事情,這樣的技術可以在某些情況下非常有用:if($x==-1)
,你會想==
,不==-
看看你RE語言的擴展型。例如,(?![=])/將與「<」匹配,但不是「< =」,而不是「=」。在(?!...)表示 「後面時除外......」。這個術語是負超前進斷言。這些拼寫有時拼寫不同,因爲它們不如大多數其他編隊標準,但通常可用。他們從不消費更多的角色,但他們創造了較慢的匹配。
的「除非前面有」或負向後看斷言有時也可以,但你可能希望避免它。讀者很少清楚,可以創建較慢的匹配。
如果您執行多次傳球,您還可以找到複合運算符,然後在找到簡單運算符的傳球之前用其他字符替換它們。
無論如何,這通常是一種非常有用的方法:在處理時緩慢地覆蓋解釋的字符串,以便在完成後留下的內容只是令牌。 RE處理器通常返回索引範圍。因此,您可以輕鬆地返回並使用其他人以後不會匹配的內容覆蓋該範圍(如控制字符標記,NUL或代字號)。
一個好處是,您可以通過調試代碼進行驗證,以檢查是否沒有任何未解釋的東西。
歡迎來到SO!沒有必要回答兩次。只需編輯一個答案(答案下方的小編輯鏈接)即可擴展它。總是試着判斷它是否值得另一個答案(更好地說:針對同一問題的解決方案採用不同的(!)方法)。對我來說,這個答案似乎更有可能擴展你的其他答案。 – 2014-01-13 17:33:11
thanx。我怎麼能錯過'+',它解決了我的大部分問題。現在我的問題看起來很愚蠢。 – gout 2012-03-12 05:56:15
現在問題是「c = a +++ b」您的邏輯需要+++作爲單個運算符。需要抓住這一點。 – gout 2012-03-12 06:14:13
使用替代方法,先將++作爲離散標記,然後在此處使用表達式。 – sweaver2112 2012-03-12 06:26:02