2015-10-15 60 views
0

您好我有下面的意思,從通過使用ORSSerial串口發送一個字符串,如「167628,79009 \ R」拔出座標NSRegular表達的表達,但是,匹配8,79009代替(\ d {5})替換正則表達式,(\ d + 5) )\ r」它的工作原理,但這個時候提供的座標是一個5位數字,只會是有用的。如果我用d {1,5}我得到同樣的結果用線啓動錨時。NSRegularExpression不匹配錨

的正則表達式是無視錨點。任何建議?

代碼

coordinatePacketRegex = [[NSRegularExpression alloc] initWithPattern:@"^(\\d+),(\\d+)\r" 
                   options:NSRegularExpressionAnchorsMatchLines 
                    error:&regexError]; 
+0

我仍然不明白你爲什麼需要錨定,你能解釋一下嗎? –

+0

當使用NSRegular表達式時,我包含了^錨以確保獲取開始之間的所有數字的行和第一個逗號 - 但這在我的設置中不起作用,如果我規定了多少個數字「\ d {5}」,但是如果座標較小,則不會發生固定數量的數字。正則表達式的第二部分似乎工作,因爲在「,」和「\ r」匹配(如果我試圖做到這一點使用$錨爲行的末尾而不是「\ r」它不' t匹配完整的字符串,我得到「9,7」。 – pjmnoble

+0

我很抱歉,但我仍然不認爲你需要爲此目的的錨點。請參閱下面的答案。 –

回答

0

好吧,話說回來:

如果我更換正規表達式 「(\ d {5})(\ d +)\ r」 它的工作原理,但此將 僅在交付的座標是5位數字時纔有用。

您的實際問題是您使用NSRegularExpressionAnchorsMatchLines。它會失敗,像「167628,79009 \ r」這樣的字符串。不要使用這個選項,而是使用零選項。 (\ d {5,}),(\ d +)\ r(請注意,我在5之後添加了一個額外的逗號。將爲您提供「至少5位數字整數部分,在逗號前儘可能多地捕捉「如果你在逗號前沒有綁定至少5個字符,只需使用((\ d +),(\ d +)\ r)。整個比賽作爲第0個捕獲組