athland5013 发表于 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 & @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


;小弟先谢谢前辈

haijie1223 发表于 2015-2-5 08:01:20

实在没看明白,是不是这个意思?Local $Txt = '你好0我是1一个2需要3匹配的4字符串5'
Local $ret = StringRegExpReplace($Txt, '(?<=是)\d', '')
ConsoleWrite($ret)

athland5013 发表于 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)
这样会不会笑掉大牙??

afan 发表于 2015-2-5 10:44:40

$ret = StringRegExpReplace($Txt, '.*?' & $Match & '(\d).*', '\1')

haijie1223 发表于 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)

netegg 发表于 2015-2-5 16:43:59

楼主到底要干什么

afan 发表于 2015-2-5 17:02:29

楼主到底要干什么
netegg 发表于 2015-2-5 16:43 http://www.autoitx.com/images/common/back.gif


    他是需要用替换的方式来获得和匹配的方式一样的结果。虽然就示例而言不需要用正则这种武器

athland5013 发表于 2015-2-5 21:27:28


$ret = StringRegExpReplace($Txt, '.*?' & $Match & '(\d).*', '\1')
afan 发表于 2015-2-5 10:44 http://www.autoitx.com/images/common/back.gif

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

结果 $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替换的原理(就这个例子而言),谢谢

afan 发表于 2015-2-5 22:14:04

问号是尽量少,而前面是*的问号,代表可以最好是无。
在满足前面 '.*?' & $Match & '(\d{1})‘ 这些条件后,它就满意了,后面都可以不动了。所以,结果就是将前面那些替换成了之前取到的匹配组1,后面的没动

athland5013 发表于 2015-2-6 00:46:06

回复 8# afan

如果说这个示例用其他简单方法实现,A版你会用什么方法,可否提示一下,搜索数组,字典?

athland5013 发表于 2015-2-6 00:47:40

回复 10# afan

谢谢你的解答!
页: [1]
查看完整版本: [已解决]请教一个正则替换(取反)的问题