[已解决]请教一个正则:匹配三个一样的数字
本帖最后由 qiuhai1991 于 2011-5-30 18:01 编辑怎样找出一串带三个数字一样的行出来?
比如
123456789
111234567
101132254
545488813
121213999
找出:
111234567
545488813
121213999
(?m)(\d)\1\1.*
这样子却匹配出1、8、9三个数字,而匹配不到整行
#Include <Array.au3>
$str = 123456789&@CRLF& _
111234567&@CRLF& _
101132254&@CRLF& _
545488813&@CRLF& _
121213999
$a = StringRegExp($str,'(?m)(\d)\1\1.*',3)
_ArrayDisplay($a) 本帖最后由 easefull 于 2011-5-28 21:14 编辑
(\d)\1{2}
用模式4.取每个结果数组的第1个元素
或者
((\d)\2{2})
用模式3,取了结果再过滤一次 取整行的话自己加.*吧 $str = 123456789&@CRLF& _
111234567&@CRLF& _
101132254&@CRLF& _
545488813&@CRLF& _
121213999
;$a = StringRegExp($str,'\b.*?(\d)(\1){2,}.*?\b',4)
$o_VBSREGEXP=ObjCreate("vbscript.regexp")
with $o_VBSREGEXP
.global=1
.pattern="\b.*?(\d)(\1){2,}.*?\b"
$a=.execute($str)
EndWith
for $t in $a
ConsoleWrite($t.value&@crlf)
Next没办法,同样的测试用au3正则测试器找出来了却无法提取出,只能用vbs正则来啦 这么麻烦啊,我还以为这是一个简单的正则 #Include <Array.au3>
$str = 123456789&@CRLF& _
111234567&@CRLF& _
101132254&@CRLF& _
545488813&@CRLF& _
121213999
$a = StringRegExp($str,'.*000.*|.*111.*|.*222.*|.*333.*|.*444.*|.*555.*|.*666.*|.*777.*|.*888.*|.*999.*',3)
_ArrayDisplay($a)
本帖最后由 tryhi 于 2011-5-29 00:16 编辑
#Include <Array.au3>
$str = 123456789&@CRLF& _
111234567&@CRLF& _
101132254&@CRLF& _
545488813&@CRLF& _
121213999
$a = StringRegExp($str,'.*000.*|.*111.*|.*222.*|.*333.*|.*444.*|.*555.*|.*666.*|.*777.*|.*888.*|.*999.*',3)
_ArrayDisplay($a)
感觉AU3的正则支持不是很好,\d{0,6}(\d)\1{2}\d{0,6}这句貌似其他语言可以 #include <Array.au3>
Local $Str = _
'123456789' & @CRLF & _
'111234567' & @CRLF & _
'101132254' & @CRLF & _
'545488813' & @CRLF & _
'121213999'
Local $Test = StringRegExp($str, '(?m)^.*?(\d)(\1{2,}).*?$', 4)
If Not @Error Then
For $i = 0 To UBound($Test) - 1
$temp=$Test[$i]
$Test[$i]=$temp
Next
EndIf
_ArrayDisplay($Test)
页:
[1]