2011-07-29 28 views
0

這裏是我的正則表達式:(^[A-Za-z][A-Za-z0-9_]*)=([A-Za-z0-9, _.]+|^(?:(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))幫助使用正則表達式

我希望我可以使用像這樣的東西在的形式配置文件相匹配的文本:

variable=value 
ipaddress=127.0.0.1 

等等

與測試字符串

test=127.0.0.1 
test1=192.168.0.1 
test2=hello world 
test3=helloworld 
test4=Carl_Sagan,Awesome,cool story bro 
test5=%should not match(#$&!&$(5vzxcv 
6test=should not match 

我上測試3210和其他一些

這個表達式只會匹配第一行。當我剪掉表達的不同部分時,它的工作原理就是我想要的,但是當我把它們放在一起的時候並不合適。

在測試網站http://gskinner.com/RegExr/它工作得很好。

^(?:(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))將在測試字符串返回所有的IP地址

(^[A-Za-z][A-Za-z0-9_]*)=將返回所有variable=頁面

[A-Za-z0-9, _.]+上會返回幾乎所有的東西

你們能幫助我理解它是什麼我做錯了?

+1

你做錯了主要的事情是不是說明你想要什麼。鑑於上面的輸入,你想要的輸出是什麼? – Bohemian

+0

你使用哪種語言?你的正則表達式分別匹配每條線。你是否想用任何一個正則表達式匹配任何東西? – Howard

+0

@波希米亞所需的輸出是除了那些不應該匹配的行之外的每一行。這是最後兩個。它只給我第一個。 – Noob

回答

0

我不建議使用正則表達式的IP地址。 Othervise你將不得不對付野獸一樣

"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$" 
+0

我不打算在ip地址上進行非常複雜的匹配。我只是讓他們指定一個最小和最大值來嘗試,它會迭代。它不一定是完美的。 – Noob

+0

加上我可以只是將你的聲明覆制到我的正則表達式和bam中,我甚至不必處理這個問題。 – Noob

0

這應該工作:

(^[A-Za-z][A-Za-z0-9_]*)=(([0-9]{1,3}\.){3,5}[0-9]{1,3}|([A-Za-z0-9, _.]*)) 

看看這裏:http://regexr.com?2ubgl

+0

你剛剛切換了最後兩組嗎? – Noob

+0

我還在他們兩個人的周圍增加了一個額外的捕捉組。這是關鍵。我切換它們是因爲你第一次匹配IP地址,所以它們永遠不會被單獨捕獲。 –