找回密码
 加入
搜索
查看: 2179|回复: 5

[AU3基础] [已解决]正则能不能匹配字符串的后半截?

[复制链接]
发表于 2011-5-18 14:58:28 | 显示全部楼层 |阅读模式
本帖最后由 雨林GG 于 2011-5-19 20:40 编辑

请大侠帮忙:如下字符串,每一条中都含有由空格分隔的五项内容,在后三项相同的情况下,只保留第一条。
不知用正则,能不能得到加下划线的字符串?

$str = "2011-05-17 02:56:23 192.168.0.1 MDDCKDDAHLBAJIGHONEGJJBH htp://192.168.0.254/" & @CRLF & _
                "2011-05-17 02:56:25 192.168.0.1 MDDCKDDAHLBAJIGHONEGJJBH htp://192.168.0.254/" & @CRLF & _
                "2011-05-17 02:56:28 192.168.0.1 MDDCKDDAHLBAJIGHONEGJJBH htp://192.168.0.254/" & @CRLF & _
                "2011-05-17 02:56:28 192.168.0.1 MDDCKDDAHLBAJIGHONEGJJBH htp://192.168.0.254/xxpt/ShowArticle.asp?ArticleID=25512" & @CRLF & _
                "2011-05-17 02:57:06 192.168.0.2 KADCKDDAKPNMGJMIIDCKFEJF htp://192.168.0.254/" & @CRLF & _
                "2011-05-17 02:57:06 192.168.0.2 KADCKDDAKPNMGJMIIDCKFEJF htp://192.168.0.254/xxjj/ShowClass.asp?ClassID=262" & @CRLF & _
                "2011-05-17 02:57:07 192.168.0.2 KADCKDDAKPNMGJMIIDCKFEJF htp://192.168.0.254/xxjj/ShowClass.asp?ClassID=262" & @CRLF & _
                "2011-05-17 02:57:29 192.168.0.2 KADCKDDAKPNMGJMIIDCKFEJF htp://192.168.0.254/xxjj/ShowClass.asp?ClassID=262&page=2" & @CRLF & _
                "2011-05-17 02:58:23 192.168.0.1 PEDCKDDANGAGMGACEGBCBCFC htp://192.168.0.254/" & @CRLF & _
                "2011-05-17 02:58:24 192.168.0.1 PEDCKDDANGAGMGACEGBCBCFC htp://192.168.0.254/"
;$Test = StringRegExpReplace($str, '(.*?\n)\1+', '$1') ;删除相邻重复行
MsgBox(0, '替换结果', $Test)
发表于 2011-5-18 16:34:41 | 显示全部楼层
Local $Str = _
                '2011-05-17 02:56:23 192.168.0.1 MDDCKDDAHLBAJIGHONEGJJBH htp://192.168.0.254/' & @CRLF & _
                '2011-05-17 02:56:25 192.168.0.1 MDDCKDDAHLBAJIGHONEGJJBH htp://192.168.0.254/' & @CRLF & _
                '2011-05-17 02:56:28 192.168.0.1 MDDCKDDAHLBAJIGHONEGJJBH htp://192.168.0.254/' & @CRLF & _
                '2011-05-17 02:56:28 192.168.0.1 MDDCKDDAHLBAJIGHONEGJJBH htp://192.168.0.254/xxpt/ShowArticle.asp?ArticleID=25512' & @CRLF & _
                '2011-05-17 02:57:06 192.168.0.2 KADCKDDAKPNMGJMIIDCKFEJF htp://192.168.0.254/' & @CRLF & _
                '2011-05-17 02:57:06 192.168.0.2 KADCKDDAKPNMGJMIIDCKFEJF htp://192.168.0.254/xxjj/ShowClass.asp?ClassID=262' & @CRLF & _
                '2011-05-17 02:57:07 192.168.0.2 KADCKDDAKPNMGJMIIDCKFEJF htp://192.168.0.254/xxjj/ShowClass.asp?ClassID=262' & @CRLF & _
                '2011-05-17 02:57:29 192.168.0.2 KADCKDDAKPNMGJMIIDCKFEJF htp://192.168.0.254/xxjj/ShowClass.asp?ClassID=262&page=2' & @CRLF & _
                '2011-05-17 02:58:23 192.168.0.1 PEDCKDDANGAGMGACEGBCBCFC htp://192.168.0.254/' & @CRLF & _
                '2011-05-17 02:58:24 192.168.0.1 PEDCKDDANGAGMGACEGBCBCFC htp://192.168.0.254/' & @CRLF
Local $Test = StringRegExpReplace($str, '(.*?)([a-zA-Z]{12,}.*?\r\n)(?=.*?\2)', '')
MsgBox(0, '替换结果', $Test)

评分

参与人数 1金钱 +36 收起 理由
雨林GG + 36 聊表心意!谢谢!~~~ 后面那个?=什么意思?

查看全部评分

 楼主| 发表于 2011-5-18 17:41:26 | 显示全部楼层
本帖最后由 雨林GG 于 2011-5-18 20:57 编辑

回复 2# 3mile


    谢谢您的帮助 ! 向您学习!!!
    就是相同项留下了最后一条,而不是第一条~!

后面那个?=什么意思 ?
发表于 2011-5-18 19:04:04 | 显示全部楼层
你这代码就不能标记出来吗,看得乱死.搞了半天还弄不明白你要的是啥
发表于 2011-5-18 19:35:56 | 显示全部楼层
;做正则替换题 by easefull
Local $sText = _
                '2011-05-17 02:56:23 192.168.0.1 MDDCKDDAHLBAJIGHONEGJJBH htp://192.168.0.254/' & @CRLF & _
                '2011-05-17 02:56:25 192.168.0.1 MDDCKDDAHLBAJIGHONEGJJBH htp://192.168.0.254/' & @CRLF & _
                '2011-05-17 02:56:28 192.168.0.1 MDDCKDDAHLBAJIGHONEGJJBH htp://192.168.0.254/' & @CRLF & _
                '2011-05-17 02:56:28 192.168.0.1 MDDCKDDAHLBAJIGHONEGJJBH htp://192.168.0.254/' & @CRLF & _
                '2011-05-17 02:56:28 192.168.0.1 MDDCKDDAHLBAJIGHONEGJJBH htp://192.168.0.254/xxpt/ShowArticle.asp?ArticleID=25512' & @CRLF & _
                '2011-05-17 02:57:06 192.168.0.2 KADCKDDAKPNMGJMIIDCKFEJF htp://192.168.0.254/' & @CRLF & _
                '2011-05-17 02:57:06 192.168.0.2 KADCKDDAKPNMGJMIIDCKFEJF htp://192.168.0.254/xxjj/ShowClass.asp?ClassID=262' & @CRLF & _
                '2011-05-17 02:57:07 192.168.0.2 KADCKDDAKPNMGJMIIDCKFEJF htp://192.168.0.254/xxjj/ShowClass.asp?ClassID=262' & @CRLF & _
                '2011-05-17 02:57:29 192.168.0.2 KADCKDDAKPNMGJMIIDCKFEJF htp://192.168.0.254/xxjj/ShowClass.asp?ClassID=262&page=2' & @CRLF & _
                '2011-05-17 02:58:23 192.168.0.1 PEDCKDDANGAGMGACEGBCBCFC htp://192.168.0.254/' & @CRLF & _
                '2011-05-17 02:58:24 192.168.0.1 PEDCKDDANGAGMGACEGBCBCFC htp://192.168.0.254/'
$sText &= @CRLF
Do
        $sText = StringRegExpReplace($sText, '(\S+\s+\S+\s+)(.*?\r\n)(\S+\s+\S+\s+\2)', '\1\2')
Until Not StringRegExp($sText, '(\S+\s+\S+\s+)(.*?\r\n)(\S+\s+\S+\s+\2)', 0)
$sText = StringRegExpReplace($sText, '\r\n$', '')
ClipPut($sText)
MsgBox(0, '替换结果', $sText)

评分

参与人数 1金钱 +20 收起 理由
雨林GG + 20 谢谢您的帮助! 请教:一定要用Do until吗?若 ...

查看全部评分

发表于 2011-5-18 22:12:08 | 显示全部楼层
本帖最后由 easefull 于 2011-5-18 22:14 编辑

我这代码必须是加do..until的.因为碰到同一电脑多次(大于2次)刷新同一页面的记录时,如
Local $sText = _
                '2011-05-17 02:56:23 192.168.0.1 MDDCKDDAHLBAJIGHONEGJJBH htp://192.168.0.254/' & @CRLF & _
                '2011-05-17 02:56:25 192.168.0.1 MDDCKDDAHLBAJIGHONEGJJBH htp://192.168.0.254/' & @CRLF & _
                '2011-05-17 02:56:28 192.168.0.2 MDDCKDDAHLBAJIGHONEGJJBH htp://192.168.0.254/' & @CRLF & _
                '2011-05-17 02:56:28 192.168.0.1 MDDCKDDAHLBAJIGHONEGJJBH htp://192.168.0.254/'

会漏处理重复连续记录的第3个记录.

至于大文件的do...until,应该不会造成cpu占用率过高.
因为第二次处理的时候只是上面漏处理的那一行.

但我很是拜服3mile的代码——那怎么为什么不需要do...until处理也能达到同样的效果呢?
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-10-2 03:16 , Processed in 0.094215 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表