我想看看一個字符串是否是一個IP地址。由於IPv6正在推出,所以最好也支持這一點,所以爲了簡單起見,我只想替換任何不是點或數字的東西。PHP正則表達式:替換不是點或數字的東西嗎?
我發現計算器這個表達式通過搜索:
\d+(?:\.\d+)+
但它確實的,我想的正好相反。是否有可能反轉該正則表達式模式?
謝謝!
我想看看一個字符串是否是一個IP地址。由於IPv6正在推出,所以最好也支持這一點,所以爲了簡單起見,我只想替換任何不是點或數字的東西。PHP正則表達式:替換不是點或數字的東西嗎?
我發現計算器這個表達式通過搜索:
\d+(?:\.\d+)+
但它確實的,我想的正好相反。是否有可能反轉該正則表達式模式?
謝謝!
嘗試以下操作:
[^.0-9]+
匹配任何不是一個點或一個數字
此正則表達式將匹配任何不是一個點或一個數字:
/[^\.0-9]/
我可能會嘗試像這樣(未經測試):
編輯:
老正則表達式是路要走,這似乎做的更好(測試後):
發現:.*?((?:\d+(?:\.\d+)+|))
取代:$1
做全球,單行。
在Perl:s/.*?((?:\d+(?:\.\d+)+|))/$1/sg
Regex的快捷方式是大小寫敏感的。我認爲你試圖做這樣的事情,但你想要的是資本d [\D] = any non-digit.
在PHP它看起來像這樣:
preg_replace('/[\D]/g', '', $string);
的javascript它是這樣的:
string.replace(/[\D]/g, '');
OP的要求是它沒有取代時期。 – user1278519
如何是否取代所有不符合IPv6規範的點或數字? –
哦,我應該更深入。我的意思是我想支持IPv4和IPv6,最簡單的方法是隻匹配包含數字和點的字符串,因爲這就是IP的組成部分。 – qwerty
呃,不是嗎? [IPv6地址](http://en.wikipedia.org/wiki/IPv6_address)由十六進制數字組成,分隔符是冒號。 –