Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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
Tcl 如何使用正则表达式在多行中搜索模式_Tcl - Fatal编程技术网

Tcl 如何使用正则表达式在多行中搜索模式

Tcl 如何使用正则表达式在多行中搜索模式,tcl,Tcl,请考虑以下模式: PPP(GJ) { __hj_o: } 什么是与上述模式匹配的正则表达式?Tcl的正则表达式可以包含换行符,但对于任何复杂的内容,都可以将其放入自己的变量中,而不是将其作为内联文本: set RE {PPP(GJ) { __hj_o: }} if {[regexp $RE $someString]} { # We got a match! } 事实上,regexp也将与上述内容匹配

请考虑以下模式:

PPP(GJ)  {
           __hj_o:
         }

什么是与上述模式匹配的正则表达式?

Tcl的正则表达式可以包含换行符,但对于任何复杂的内容,都可以将其放入自己的变量中,而不是将其作为内联文本:

set RE {PPP(GJ)  {
           __hj_o:
         }}

if {[regexp $RE $someString]} {
    # We got a match!
}
事实上,
regexp
也将与上述内容匹配:

set RE {PPP(GJ)\s+{\s+__hj_o:\s+}}
因为在默认情况下,换行符只是普通的空白字符(即,由
\s
匹配)。(上面的REs可能不是您想要的;它们可能也需要适合非空白部分的模式。)


但是,您需要确保匹配的字符串具有您想要匹配的全部内容。如果您一次只馈送一行,那么多行模式将始终失败。这听起来很明显,但这是最容易犯的错误。

你是说正则表达式,对吗?用什么语言?tcl?@nandini只要将这些多行放到一个字符串中,每个命令(进行匹配)都可以匹配多行。真正地(好吧,Tk文本小部件中的Expect和搜索方法有点棘手;默认情况下,它们使用单行匹配模式。)