2014-01-10 75 views
0

對於可能是明顯的答案的道歉!我試圖在adb Logcat流(即時)上運行Perl搜索以在找到特定字符串時退出。我要找(這是文本的一個較大的生產線的一部分)是這個字符串...Perl REGEX,在匹配字符串中的非字母數字時遇到問題

RIL(1) :[0129]< OPERATOR {O2 -UK, 23410, 23410} 

我在做一個正則表達式幾次嘗試,但還是我的腳本只是沒有檢測到它,這是我的下面

m/RIL\(1\)\s\:\[[\d+]\]\<\sOPERATOR\s\{[\w+]\,\s[\d+]\,\s[\d+]\}/ 

文本的全部亞行logcat行最新嘗試是這樣的......

D/RILJ ( 663): RIL(1) :[0129]< OPERATOR {O2 -UK, 23410, 23410} 

我的劇本是好的,因爲它與其他字符串的作品,這只是我的正則表達式是有點壞,因爲我我對它很陌生。

任何幫助將不勝感激。

感謝, MikG

回答

1

三個問題:

  1. 你做[\d+]當你的意思是\d+\d+相當於[0-9]+(「任何數字,至少一次」)。當你說[\d+]時,這實際上相當於[+d](「+'或'd'」)
  2. 你正在逃避你的逗號。這實際上並沒有傷害任何東西,但它是醜陋的和不必要的。在大多數正則表達式中,逗號並不特別。
  3. 您正在嘗試將O2 -UK\w+相匹配。 \w是「單詞」字符類。粗略地說,它匹配編程語言中標識符通常是合法的字符:[a-zA-Z_]

要修復#3,您有幾個選擇。如果它始終是O2 -UK,只需匹配該文本文本即可。你也可以匹配[^,]+,(「任何不是逗號,至少一次,後面跟一個逗號)」。我必須知道這個價值的範圍才能提出一個良好的中間模式。

+0

謝謝納撒尼爾,我以前的錯誤現在看起來很明顯,希望我能通過練習變得更好。事實上,看起來主要的絆腳石是字符串中的'O2 -UK'部分,所以使用'[^,] +'的建議來解決問題(除了我的其他初學者錯誤!)。再次感謝! – MikG

+0

不要氣餒!正則表達式是一個很棒的工具,但是學習曲線很陡峭。調試的一個好的開始是將你的非工作正則表達式切成小塊。 (我用「OPERATOR」把所有的東西都運行起來,並且它很有效,所以後來我知道在下半場更仔細一些。) –

0

嘗試:

m/RIL\(1\)\s:\[\d+]<\sOPERATOR\s\{\w+,\s\d+,\s\d+}/ 
如果你把方括號內的量詞

,量詞被視爲文字。

你只需要逃避:() [ {^$ . * + ? | \

0

我覺得正則表達式是你的問題,在這裏,我發現其中包含了正則表達式一個答案..

使用此正則表達式匹配的字母數字內容:正則表達式模式=新正則表達式(@ 「\ W | _」);

來源:Regex Expressions for all non alphanumeric symbols

1

你不應該使用這樣的事情:[\d+]。相反,使用這個:\d+[0-9]+

你不必逃避<,

因此,嘗試這樣的事情:

m/RIL\(1\)\s:\[\d+\]<\sOPERATOR\s\{\w+,\s\d+,\s\d+\}/