Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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
Regex 在Expect缓冲区中查找字符串的正则表达式_Regex_String_Scripting_Tcl_Expect - Fatal编程技术网

Regex 在Expect缓冲区中查找字符串的正则表达式

Regex 在Expect缓冲区中查找字符串的正则表达式,regex,string,scripting,tcl,expect,Regex,String,Scripting,Tcl,Expect,我试图找到一个正则表达式,它可以匹配一个转义字符字符串(Expect响应,请参阅)和一个六位数(第一个字符是字母数字) 以下是我需要识别的整个字符串: \r\n\u001b[1;14HX76196 最后,我需要提取字符串: X76196 以下是我已经得到的: interact { #... #... #this expression does not identify the screen location #I need t

我试图找到一个正则表达式,它可以匹配一个转义字符字符串(Expect响应,请参阅)和一个六位数(第一个字符是字母数字)

以下是我需要识别的整个字符串:

\r\n\u001b[1;14HX76196
最后,我需要提取字符串:

X76196 
以下是我已经得到的:

interact {
        #...
        #...
        #this expression does not identify the screen location
        #I need to find "\r\n\u001b[1;14H" AND "([a-zA-Z0-9]{1})[0-9]{5}$"
        #This regex was what I was using before.
        -nobuffer -re {^([a-zA-Z0-9]{1})?[0-9]{5}$} {
                set number $interact_out(0,string)
        }   
我需要识别转义字符,以验证它是否是该屏幕区域中的字段。所以我需要一个包含第一部分的正则表达式,但是反斜杠把我弄糊涂了


还有,一旦$number变量中有了完整的字符串,如何在Tcl中的另一个变量中仅隔离该数字?

如果您只想将数字放在末尾,那么这就足够了

[0-9]{6}
使用新信息更新

假设\n是一个换行符,而不是后跟一个文字n的文字,\n,您可以这样做

\r\n\u001B\[1;14H(X[0-9]{5})

如果你只想把数字放在最后,那么这就足够了

[0-9]{6}
使用新信息更新

假设\n是一个换行符,而不是后跟一个文字n的文字,\n,您可以这样做

\r\n\u001B\[1;14H(X[0-9]{5})

我通过进一步挖掘发现了一些东西。首先,我看的不是程序的输出,而是用户的输入。我需要添加“-o”标志来查看程序输出。我还将正则表达式缩短为必要的部分

@rikh中的regex示例让我了解了他或我自己的regex失败的原因,这是因为我不是在看输出,而是在看输入。因此,我尝试的原始正则表达式不是错误,而是正在查看的数据(缺少“-o”标志)

这是我问题的完整答案

interact {
#...
    -o -nobuffer -re {(\[1;14H[a-zA-Z0-9]{1})[0-9]{5}} {
            #get number in place
            set numraw $interact_out(0,string)
            #get just number out
            set num [string range $numraw 6 11] 
            #switch to lowercase
            set num [string tolower $num]
            send_user "  stored number: $num"
    }   
}

我是Expect和Tcl的不速之客,因此,如果这些都没有意义,或者您对interact标志有更多的了解,请告诉我。

我通过进一步挖掘发现了一些东西。首先,我看的不是程序的输出,而是用户的输入。我需要添加“-o”标志来查看程序输出。我还将正则表达式缩短为必要的部分

@rikh中的regex示例让我了解了他或我自己的regex失败的原因,这是因为我不是在看输出,而是在看输入。因此,我尝试的原始正则表达式不是错误,而是正在查看的数据(缺少“-o”标志)

这是我问题的完整答案

interact {
#...
    -o -nobuffer -re {(\[1;14H[a-zA-Z0-9]{1})[0-9]{5}} {
            #get number in place
            set numraw $interact_out(0,string)
            #get just number out
            set num [string range $numraw 6 11] 
            #switch to lowercase
            set num [string tolower $num]
            send_user "  stored number: $num"
    }   
}

我是Expect和Tcl的noob,因此如果其中任何一个都没有意义,或者如果您对interact标志有任何进一步的了解,请告诉我。

这个正则表达式在Expect脚本中,它在SSH会话中搜索响应。我需要正则表达式来匹配整个字符串\r\n\u001b[1;14HX76196.“\r\n\u001b[1;14H”部分将始终相同。“X76196”部分将始终是不同的数字。我编辑了我的问题以更好地定义它。这不仅仅是获取数字本身。我更新了我的答案以匹配。括号将允许您仅从字符串的其余部分获取Xxxxxx部分。此正则表达式位于Expect脚本中,该脚本在SSH会话中搜索响应。我需要正则表达式来匹配整个字符串\r\n\u001b[1;14HX76196.“\r\n\u001b[1;14H”部分将始终相同。“X76196”部分将始终是不同的数字。我编辑了我的问题以更好地定义它。这不仅仅是获取数字本身。我已更新了我的答案以匹配。括号将允许您仅从字符串的其余部分获取Xxxxxx部分。