qiuhai1991 发表于 2011-5-28 20:23:09

[已解决]请教一个正则:匹配三个一样的数字

本帖最后由 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:09:57

本帖最后由 easefull 于 2011-5-28 21:14 编辑

(\d)\1{2}
用模式4.取每个结果数组的第1个元素

或者
((\d)\2{2})
用模式3,取了结果再过滤一次

easefull 发表于 2011-5-28 21:18:18

取整行的话自己加.*吧

kevinch 发表于 2011-5-28 21:19:41

$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正则来啦

qiuhai1991 发表于 2011-5-28 23:49:08

这么麻烦啊,我还以为这是一个简单的正则

tryhi 发表于 2011-5-29 00:11:51

#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:12:06

本帖最后由 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}这句貌似其他语言可以

3mile 发表于 2011-5-29 00:25:41

#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]
查看完整版本: [已解决]请教一个正则:匹配三个一样的数字