yjing1982 发表于 2015-7-15 16:43:03

[已解决]日期的正则表达

本帖最后由 yjing1982 于 2015-7-27 14:18 编辑

我在写程序时,想用正则表达,日期 d/M/YYYY,怎么用正则表达式通配。然后替换以前的日期为当天。这该怎么写?

yjing1982 发表于 2015-7-16 12:19:21

自己顶一下 ,
我写了这个程序进行匹配,始终不成功,返回值是0
$data = "6/14/2015"
$check = StringRegExp ($data, '(|1)/(||3)/(19{2}|2{3}))')
MsgBox(0, "", $check)

haijie1223 发表于 2015-7-16 15:23:38

$data = "6/14/2015"
$check = StringRegExp($data, '\d+/\d+/\d{4}', 3)
MsgBox(0, "", $check)

yjing1982 发表于 2015-7-16 16:51:04

本帖最后由 yjing1982 于 2015-7-16 16:54 编辑

谢谢,不过,我想了解下,在你的程序里可以调用数组check,我的函数怎么不行呢

haijie1223 发表于 2015-7-16 18:17:30

回复 4# yjing1982


    版本不同,我是3.3.9.4

yjing1982 发表于 2015-7-16 18:56:22

本帖最后由 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:38:17

本帖最后由 h20040606 于 2015-7-17 06:44 编辑

# TO 提问者
你的多了个),看一下语句的结尾。可能是笔误,这种错误很难发现

$check = StringRegExp ($data, '(|1)/(||3)/(19{2}|2{3})')

h20040606 发表于 2015-7-17 06:47:02

回复 5# haijie1223


    与版本应该没有关系,他写错了。结尾处多写了)
我用的版本3.3.15.0

yjing1982 发表于 2015-7-17 09:07:27

恩,谢谢,我再看了下,的确多了一个“)”

yjing1982 发表于 2015-7-17 09:43:23

我再多提一个问题,如果正则表达式和普通表达式连起来写,该怎么写呢
我这种写法可以吗?不过又提示我$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:17:39

本帖最后由 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)

h20040606 发表于 2015-7-17 10:23:02

日期的匹配是很复杂的,上面的方法2/31/2015 4/31/2015也能匹配上。

yjing1982 发表于 2015-7-17 11:15:42

本帖最后由 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:43:00

本帖最后由 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)

yjing1982 发表于 2015-7-17 13:35:22

回复 14# h20040606


    你说的我理解。我也看到了$return可以返回修改值。我现在需要对我的123.txt文件进行时间上的修改。我该怎么写呢?谢谢。
   背景及需求,公司里有很多.txt文件时间都是以前的,我想用autoit,把时间改成当天或特定时间。我看正则表达式可以匹配原来日期,然后我想用_ReplaceStringInFile,进行替换。一开始,我使用具体日期是可以替换的,即我用7/17/2015是可以替换原来日期的,不过用正则表达式就替换不了了。
页: [1] 2
查看完整版本: [已解决]日期的正则表达