我正在尝试使用正则表达式比较一个缓冲区值。
regexp {.*([0-9]+).*} $buffer match callID: $CallId
请您解释一下本声明中将要比较的内容。
答案 0 :(得分:0)
在正则表达式中,$CallId
不正确。我认为这是一个错字。你的正则表达式可能如下所示,
regexp {.*([0-9]+).*} $buffer match callID
它将检查变量buffer
中的模式。 regexp
的基本语法如下,
regexp?开关? exp string?matchVar? ?subMatchVar subMatchVar ...?
变量match
将保持整个模式,而变量callID
将具有您给出的第一个子匹配。这只不过是该文本中匹配的数值。
子匹配只是括号内给出的表达式,每个子匹配输出将保存在regexp
命令中给出的后续变量中。
此表达式可以显示如下
.*
将匹配任何内容并且它是贪婪的,这意味着它将尝试尽可能匹配。 (除非绝对必要,否则不建议)。
0-9
将匹配0到9中的任何数字,+
的使用将确保匹配0到9中的一个或多个数字值。(您还可以使用{{1} }这相当于0-9范围)
更新:
变量\d
的内容是什么?当前正则表达式将匹配最后一次出现的数值。例如,假设缓冲区的内容可能类似于
buffer
如果应用给定的正则表达式,则输出可以如下,
set buffer "sometextherewithnumbers89sometext11211somemoretexthere891textstopshere"
输出
puts [ regexp {.*([0-9]+).*} $buffer match callID ]; # Prints '1' since it matched
puts $match; # Prints whole buffer content
puts $callID; # Prints the number '9', since it is the last digit in the buffer
根据正则表达式,我们可以按以下方式将其分开
1
sometextherewithnumbers89sometext11211somemoretexthere789textstopshere
9
正如我先前所指出的那样,.* --- part 1
([0-9]+) --- part 2
.* --- part 3
是一个贪婪的,它会尽可能地匹配。因此,开头的.*
与.*
匹配。然后sometextherewithnumbers89sometext11211somemoretexthere78
将匹配最后一位([0-9]+)
。最后,9
将匹配剩余的文字.*
。
查看here以查看给定示例的匹配模式。