newuser 发表于 2010-12-16 10:19:45

正则:只提取IP的数字问题?

#include<array.au3>
Local $Num="192.168.1.10"
;Local $Result=StringRegExp($Num,'[^.]*',3)
Local $Result=StringRegExp($Num,'\d+(?!.)',3)
_ArrayDisplay($Result)用Local $Result=StringRegExp($Num,'[^.]*',3)可以提出192.168.1.10中的数字.但也提出了 4个空格.
用'\d+(?!.)',只提出了10.
我只想提出192 168 1 10这4个数字部分.

水木子 发表于 2010-12-16 10:26:03

正则教程中有提到匹配IP地址的表达式:((2\d|25|?\d\d?)\.){3}(2\d|25|?\d\d?)

afan 发表于 2010-12-16 11:00:46

如果字符串仅包含Ip地址 \d+ 即可,因为并不需要判断其合法性

newuser 发表于 2010-12-16 14:22:01

回复 2# 水木子
谢谢,我想用(?!.)练习将IP地址的数字部分提出来,但没有成功?
另外,以下代码提出的也不准确?#include<array.au3>
Local $Num="192.168.1.10"
;Local $Result=StringRegExp($Num,'[^.]*',3)
Local $Result=StringRegExp($Num,'((2\d|25|?\d\d?)\.){3}(2\d|25|?\d\d?)',3)
_ArrayDisplay($Result)

newuser 发表于 2010-12-16 14:24:18

回复 3# afan

\d+解决了,我一直想用(?!.)解决的?只是还没有答案?
另外,想[^.]*怎么能作到不匹配空格啊?就是1楼的那个例子.

afan 发表于 2010-12-16 17:54:55

[^.]+ 这样可以
\d+(?!.) 没意义

newuser 发表于 2010-12-17 08:47:35

回复 6# afan
如果用[^.]*就多匹配出4个空格!
不知道这样理解是否正确:
*表示匹配0次或n次,当*匹配是0次时,[^.]没有了匹配对象就只能匹配"空格或制表符"了,所以多出4个空格;
将*换成+,它至少匹配1次,那么[^.]就有了匹配对象,所以不可能出现空格了.
页: [1]
查看完整版本: 正则:只提取IP的数字问题?