[已解决]日期的正则表达
本帖最后由 yjing1982 于 2015-7-27 14:18 编辑我在写程序时,想用正则表达,日期 d/M/YYYY,怎么用正则表达式通配。然后替换以前的日期为当天。这该怎么写? 自己顶一下 ,
我写了这个程序进行匹配,始终不成功,返回值是0
$data = "6/14/2015"
$check = StringRegExp ($data, '(|1)/(||3)/(19{2}|2{3}))')
MsgBox(0, "", $check) $data = "6/14/2015"
$check = StringRegExp($data, '\d+/\d+/\d{4}', 3)
MsgBox(0, "", $check) 本帖最后由 yjing1982 于 2015-7-16 16:54 编辑
谢谢,不过,我想了解下,在你的程序里可以调用数组check,我的函数怎么不行呢 回复 4# yjing1982
版本不同,我是3.3.9.4 本帖最后由 yjing1982 于 2015-7-16 19:06 编辑
嗯,谢谢。根据你写的程序,我修改了自己的程序如下:
$data = "6/14/2015"
$check = StringRegExp ($data, '(|1)/(0||31)/(19{2}|2{3}))', 3)
MsgBox(0, "", $check)
不过,测试时,显示错误,Error:非数组使用下标。
另外,你的程序,在我的autoit是能正常运行的,能不能帮我分析下。 本帖最后由 h20040606 于 2015-7-17 06:44 编辑
# TO 提问者
你的多了个),看一下语句的结尾。可能是笔误,这种错误很难发现
$check = StringRegExp ($data, '(|1)/(||3)/(19{2}|2{3})') 回复 5# haijie1223
与版本应该没有关系,他写错了。结尾处多写了)
我用的版本3.3.15.0 恩,谢谢,我再看了下,的确多了一个“)” 我再多提一个问题,如果正则表达式和普通表达式连起来写,该怎么写呢
我这种写法可以吗?不过又提示我$check不是数组
$data = "Loaded VCAL Data on dpo1 (Last Cal:6/4/2015 08:42:45 UTC)"
$check = StringRegExp ($data, "Loaded VCAL Data on dpo1 (Last Cal:(|1)/(0||31)/(2{3}) 08:42:45 UTC)", 3)
MsgBox(0, "", $check) 本帖最后由 h20040606 于 2015-7-17 10:24 编辑
回复 10# yjing1982
(1)关于日的这个地方写的有问题: (0||31)
按你的写法1日到9日需写成01到09了,原来的写法是对的。
或者改成 (0|{0,1}|31)
(2) 括号 (和)是元字符,需要转义,写成 \( 和\) 。看一下 Last 前面的( 和UTC后面的)
$check = StringRegExp ($data, "Loaded VCAL Data on dpo1 \(Last Cal:(|1)/(0|{0,1}|31)/(2{3}) 08:42:45 UTC\)", 3) 日期的匹配是很复杂的,上面的方法2/31/2015 4/31/2015也能匹配上。 本帖最后由 yjing1982 于 2015-7-17 12:10 编辑
回复 12# h20040606
那只要在正则表达式的语句里,就一定要符合正则表达式的规则咯,我可以用^$来结束正则,然后用普通表达式的规则呢?
如果可以的话,两个表达式在一条语句的话,有哪些需要注意的?
另外,我想设计一个替换原有时间的程序,我的程序这么写,无法替换的原因是什么呢?ps:如果我写具体时间是可以替换的。
#include <File.au3>
$t_path = "C:\Users\admin\Desktop\123.txt"
$find = "Loaded VCAL Data on dpo1 \(Last Cal:(|1)/(||3)/(19{2}|2{3}) 08:42:45 UTC\)"
$replace= "Loaded VCAL Data on dpo1 (Last Cal:7/14/2015 08:42:45 UTC)"
_ReplaceStringInFile($t_path, $find, $replace) 本帖最后由 h20040606 于 2015-7-17 12:51 编辑
回复 13# yjing1982
用StringRegExpReplace:参考下面
$data = "Loaded VCAL Data on dpo1 (Last Cal:6/04/2015 08:42:45 UTC)"
$return=StringRegExpReplace($data,"(|1)/(0|{0,1}|31)/(2{3})", '7/14/2015')
MsgBox(0,"",$return) 回复 14# h20040606
你说的我理解。我也看到了$return可以返回修改值。我现在需要对我的123.txt文件进行时间上的修改。我该怎么写呢?谢谢。
背景及需求,公司里有很多.txt文件时间都是以前的,我想用autoit,把时间改成当天或特定时间。我看正则表达式可以匹配原来日期,然后我想用_ReplaceStringInFile,进行替换。一开始,我使用具体日期是可以替换的,即我用7/17/2015是可以替换原来日期的,不过用正则表达式就替换不了了。
页:
[1]
2