找回密码
 加入
搜索
查看: 5857|回复: 11

[AU3基础] [已解决]请教一个正则替换(取反)的问题

  [复制链接]
发表于 2015-2-5 07:28:42 | 显示全部楼层 |阅读模式
本帖最后由 athland5013 于 2015-2-6 01:11 编辑

Local $Txt = '你好0我是1一个2需要3匹配的4字符串5'

;已知条件"我是",需要匹配该条件的后面第一个数字
Local $Match = '我是'

Local $ret = StringRegExp($Txt, $Match & '(\d{1})', 3)
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $ret = ' & $ret[0] & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

;我明白怎么用StringRegExp来匹配出来

;但问题来了,如果用 StringRegExpReplace 我却没有找到窍门
;我的思路是取反替换为空,却没有匹配成功

Local $ret = StringRegExpReplace($Txt, $Match & '[\^\d{1}].*?', '');我要得到 1,请教这里的正则应该怎么写,谢谢
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $ret = ' & $ret & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console


;小弟先谢谢前辈
发表于 2015-2-5 08:01:20 | 显示全部楼层
实在没看明白,是不是这个意思?
Local $Txt = '你好0我是1一个2需要3匹配的4字符串5'
Local $ret = StringRegExpReplace($Txt, '(?<=是)\d', '')
ConsoleWrite($ret)

评分

参与人数 1金钱 +10 收起 理由
athland5013 + 10 谢谢参与

查看全部评分

 楼主| 发表于 2015-2-5 08:44:14 | 显示全部楼层
本帖最后由 athland5013 于 2015-2-5 08:45 编辑

回复 2# haijie1223

兄弟,你的代码结果是
$ret = 你好0我是一个2需要3匹配的4字符串5

我要的结果是'1',与你的刚刚相反

我需要的是第6行和第14行的结果是一样的,你复制我的代码运行一下就理解了
发表于 2015-2-5 10:38:24 | 显示全部楼层
Local $Txt = '你好0我是1一个2需要3匹配的4字符串5'
Local $ret = StringRegExpReplace($Txt, '[^1]', '')
ConsoleWrite($ret)

这样会不会笑掉大牙??

评分

参与人数 1金钱 +10 收起 理由
athland5013 + 10 谢谢参与

查看全部评分

发表于 2015-2-5 10:44:40 | 显示全部楼层
$ret = StringRegExpReplace($Txt, '.*?' & $Match & '(\d).*', '\1')

评分

参与人数 1金钱 +20 收起 理由
athland5013 + 20 谢谢

查看全部评分

发表于 2015-2-5 13:08:43 | 显示全部楼层
回复 3# athland5013


    实在是没看明白,这样?
Local $Txt = '你好0我是1一个2需要3匹配的4字符串5'
;~ Local $ret = StringRegExpReplace($Txt, '(?<=是)\d', '')
Local $ret = StringRegExp($Txt, '(?<=是)\d', 3)
ConsoleWrite($ret[0])
发表于 2015-2-5 16:43:59 | 显示全部楼层
楼主到底要干什么
发表于 2015-2-5 17:02:29 | 显示全部楼层
楼主到底要干什么
netegg 发表于 2015-2-5 16:43



    他是需要用替换的方式来获得和匹配的方式一样的结果。虽然就示例而言不需要用正则这种武器
 楼主| 发表于 2015-2-5 21:27:28 | 显示全部楼层
$ret = StringRegExpReplace($Txt, '.*?' & $Match & '(\d).*', '\1')
afan 发表于 2015-2-5 10:44


谢谢指教,代码得到我想要的结果

结果 $ret = 1

但我之前测试的
$ret = StringRegExpReplace($Txt, '.*?' & $Match & '(\d{1}).*?', '\1')
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $ret = ' & $ret & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
得到结果是 $ret = 1一个2需要3匹配的4字符串5

想请问下,我用的正则式基本就是比你的在行末多了个"?",结果差这么远!!

求这里的* 与 ? 的关系 和StringRegExpReplace替换的原理(就这个例子而言),谢谢
发表于 2015-2-5 22:14:04 | 显示全部楼层
问号是尽量少,而前面是*的问号,代表可以最好是无。
在满足前面 '.*?' & $Match & '(\d{1})‘ 这些条件后,它就满意了,后面都可以不动了。所以,结果就是将前面那些替换成了之前取到的匹配组1,后面的没动
 楼主| 发表于 2015-2-6 00:46:06 | 显示全部楼层
回复 8# afan

如果说这个示例用其他简单方法实现,A版你会用什么方法,可否提示一下,搜索数组,字典?
 楼主| 发表于 2015-2-6 00:47:40 | 显示全部楼层
回复 10# afan

谢谢你的解答!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-15 10:18 , Processed in 0.092559 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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