Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
REGEXP非捕获组正在使用TCL捕获_Regex_Tcl - Fatal编程技术网

REGEXP非捕获组正在使用TCL捕获

REGEXP非捕获组正在使用TCL捕获,regex,tcl,Regex,Tcl,我想在我的TCL脚本中使用REGEXP解析以下数据: Mar 31 11:30:00 UTC+0100 2015 Mar 31 17:00:00 UTC+0100 2015 Mar 31 17:30:00 UTC+0100 2015 Apr 1 11:30:00 UTC+0100 2015 Apr 1 17:00:00 UTC+0100 2015 Apr 1 17:30:00 UTC+0100 2015 Apr 2 11:30:00 UTC+0100 2015 我只想从上面的数据中提取月份的日

我想在我的TCL脚本中使用REGEXP解析以下数据:

Mar 31 11:30:00 UTC+0100 2015
Mar 31 17:00:00 UTC+0100 2015
Mar 31 17:30:00 UTC+0100 2015
Apr 1 11:30:00 UTC+0100 2015
Apr 1 17:00:00 UTC+0100 2015
Apr 1 17:30:00 UTC+0100 2015
Apr 2 11:30:00 UTC+0100 2015
我只想从上面的数据中提取月份的日期。 这是我到目前为止提出的正则表达式,我不知道为什么它不起作用

(?:\w{3}\s)(\d{1,2})(?:\s)
我已经用我的样本数据在RegExr站点上测试了它,它似乎在那里工作正常;它返回组中的月份,但当我在TCL脚本中运行它时,它返回所有匹配项,即返回非捕获组

这里有我遗漏的东西吗?我对正则表达式不太在行

谢谢

编辑:

下面是我脚本中的代码示例。我有一个CSV文件,我正在从其中读取sData6列包含上述日期/时间信息

while {[gets $fInputFile line] >= 0} {
    set aAllOptions [split $line ,]
    lassign $aAllOptions sData1 sData2 sData3 sData4 sData5 sData6

    regexp -all {(?:\w{3}\s)(\d{1,2})(?:\s)} $sData6 regexData6

    puts "Printing regexp value $regexData6\n"
我的puts语句返回:

Mar 31 
我想要它作为回报:

31

您使用的正则表达式工作正常,只是语法问题,正如我在评论中所说:

regexp -all {(?:\w{3}\s)(\d{1,2})(?:\s)} $sData6 -> regexData6 
puts "Printing regexp value $regexData6\n"
语法是:

regexp ?switches? exp string ?matchVar? ?subMatchVar subMatchVar ...?

您使用的是
matchVar
,其中包含完整匹配
subMatchVar
包含第一个捕获的组,以及您需要的组

我将
matchVar
保存在
->
中(这里几乎可以使用任何变量名,因为我不需要它,所以我不需要有意义的东西)


FWIW,您可以使用这个较短的正则表达式来实现相同的结果:

regexp -all {\w{3}\s(\d{1,2})\s} $sData6 -> regexData6 

你能把你正在使用的密码写下来吗?也许可以用一个示例代码来重现你所遇到的问题?@Jerry我已经用一个示例更新了我的问题。好吧,这只是语法问题。我将在几分钟后给出答案,这是一个成功的方法,现在脚本运行正常。我无法投票支持你的答案,因为我是一个新用户。@p_因为不要担心投票支持你提出的问题的答案;向上投票机制主要供其他人使用。(现在,它有两张赞成票,所以它工作得很好…)