找回密码
 加入
搜索
查看: 2781|回复: 9

[效率算法] 正则问题 - 如何在A后面是B的情况下不捕获?

    [复制链接]
发表于 2017-6-21 21:13:24 | 显示全部楼层 |阅读模式
本帖最后由 帆船 于 2017-6-22 14:45 编辑
Global $String1 = "This is a String, Without anything", $String2 = 'This is a String With "$"', $String3 = "This is a String With $", $String4 = 'This is a String With a "$" by ' & Chr(36) & "'s ASCII Code..."
对如上这个字符串使用正则,提取字符串类型变量的名称和值,我目前采用
(?i)(\$[\w]+?)[\h]*=[\h]*(["'][^\$]*["'])
但是由于存在极端情况,会出现第二个变量值被截断的情况,
[0]$String1
[1]"This is a String, Without anything"
[2]$String2
[3]'This is a String With "
[4]$String4
[5]'This is a String With a "
[完毕]
我想如何在 \$ 后面是 StringXX 的情况下才截断?

如果能够实现,我想这样是比较好的,毕竟二楼的会受 & 连接的影响,七楼的对字符串变量的值含有逗号会造成截断……
我可以保证输入的字符串变量内容不会含有 \$StringXX

--------------------------------------------------------------------------
使用二楼的之后,才发现我的正则不止是被$影响,还跟引号有关……使用 & 连接的表达方法也无法支持……
发表于 2017-6-21 21:54:02 | 显示全部楼层
(?i)(\$[\w]+?)\s*=\s*(\S)(\V*?)\2
得到:
[0]$String1
[1]"
[2]This is a String
[3]$String2
[4]'
[5]This is a String With "$"
[完毕]
坐等A版更精妙的
 楼主| 发表于 2017-6-21 21:57:50 | 显示全部楼层
回复 2# zghwelcome
您那个[1]和[4]好像是多余了?
 楼主| 发表于 2017-6-21 22:10:00 | 显示全部楼层
回复 2# zghwelcome
是不错的,使用您的表达式之后我才发现问题还跟引号有关……
发表于 2017-6-21 22:10:31 | 显示全部楼层
能力有限,看A版怎么写
 楼主| 发表于 2017-6-21 22:22:16 | 显示全部楼层
回复 5# zghwelcome
然后我又遇上Chr()函数……炸裂……
发表于 2017-6-22 13:42:53 | 显示全部楼层
(?:^|,\h*)(\$\H+)\h*=\h*([^,\v]+)
仅是针对一楼示例.
 楼主| 发表于 2017-6-22 14:09:17 | 显示全部楼层
本帖最后由 帆船 于 2017-6-22 14:25 编辑

回复 7# Alam
如果前面加上 Global 第一个就取不到了呢,并且如果字符串内含有英文半角逗号也会截断,您再帮忙看看?
发表于 2017-6-23 10:45:33 | 显示全部楼层
问题改来改去,明显跟标题不符了吧? 先确定匹配的文本和结果吧,谁有空跟你玩接龙猜迷呢.
发表于 2017-6-24 01:58:22 | 显示全部楼层
如果你是要处理AU3脚本,变量赋值有着许多的样式.那怕是你顶楼贴出的代码都不能代表所有的情况.只有分析其共同的特点,才能正确提取变量及值.这个问题我在论坛求教过.可惜的是,没人回答
http://www.autoitx.com/forum.php ... amp;fromuid=7638255,希望对你有所帮助
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-21 21:08 , Processed in 0.075194 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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