2011-09-25 83 views
3

我想看看一個字符串是否是一個IP地址。由於IPv6正在推出,所以最好也支持這一點,所以爲了簡單起見,我只想替換任何不是點或數字的東西。PHP正則表達式:替換不是點或數字的東西嗎?

我發現計算器這個表達式通過搜索:

\d+(?:\.\d+)+ 

但它確實的,我想的正好相反。是否有可能反轉該正則表達式模式?

謝謝!

+0

如何是否取代所有不符合IPv6規範的點或數字? –

+0

哦,我應該更深入。我的意思是我想支持IPv4和IPv6,最簡單的方法是隻匹配包含數字和點的字符串,因爲這就是IP的組成部分。 – qwerty

+0

呃,不是嗎? [IPv6地址](http://en.wikipedia.org/wiki/IPv6_address)由十六進制數字組成,分隔符是冒號。 –

回答

1

嘗試以下操作:

[^.0-9]+ 

匹配任何不是一個點或一個數字

+1

無需逃離點。 –

+0

謝謝@TimPietzcker –

+0

如果你們還在那裏,我犯了一個錯誤!我也想包括角色。 :/ – qwerty

4

此正則表達式將匹配任何不是一個點或一個數字:

/[^\.0-9]/ 
0

我可能會嘗試像這樣(未經測試):
編輯:
老正則表達式是路要走,這似乎做的更好(測試後):
發現:.*?((?:\d+(?:\.\d+)+|))
取代:$1

做全球,單行。

在Perl:s/.*?((?:\d+(?:\.\d+)+|))/$1/sg

-1

Regex的快捷方式是大小寫敏感的。我認爲你試圖做這樣的事情,但你想要的是資本d [\D] = any non-digit.

在PHP它看起來像這樣:

preg_replace('/[\D]/g', '', $string); 

的javascript它是這樣的:

string.replace(/[\D]/g, ''); 
+0

OP的要求是它沒有取代時期。 – user1278519