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
如何避免匹配此regexp中的最后一个字母?_Regex_Tcl - Fatal编程技术网

如何避免匹配此regexp中的最后一个字母?

如何避免匹配此regexp中的最后一个字母?,regex,tcl,Regex,Tcl,我有一个关于tcl中regexp的问题: first output: TIP_12.3.4 % second output: TIP_12.3.4 % 有时输出可能如下所示: first output: TIP_12 % second output: TIP_12 % 我想使用以下exgexp获取数字12.3.4或12: output: TIP_(/[0-9].*/[0-9]) 但是为什么它不匹配12.3.4或12%?试试这个: output: TIP_(/([0-9\.^%]*)/[0-

我有一个关于tcl中regexp的问题:

first output: TIP_12.3.4 %
second output: TIP_12.3.4 %
有时输出可能如下所示:

first output: TIP_12 %
second output: TIP_12 %
我想使用以下exgexp获取数字12.3.4或12:

output: TIP_(/[0-9].*/[0-9])
但是为什么它不匹配12.3.4或12%?

试试这个:

output: TIP_(/([0-9\.^%]*)/[0-9])
捕获组1

此处演示:


您需要转义圆点,否则它代表“匹配每个字符”。另外,我不确定您的regexp中的斜杠。更好的解决方案:

/TIP_(\d+\.?)+/

以下表达式适用于我:

{TIP_((\d+\.?)+)}

您的问题是,
/
在Tcl的正则表达式语言中一点也不特殊。它只是一个普通的可打印非字母字符。(其他语言有点不同,因为在
/
字符中包含正则表达式是很常见的;在Tcl中不是这种情况。)因为它是一个简单的文本,在RE中使用它会使它在输入中预期到它(尽管它不在那里);不出所料,这使得RE不匹配

修复问题:我会使用这样的正则表达式:
output:TIP_389;([\d.]+)
,前提是数据的格式合理。这将导致这样的代码:

regexp {output: TIP_([0-9.]+)} $input -> dottedDigits
这里所有不在括号内的内容都是文本,因此代码能够找到要匹配的内容。在括号内(我们为以后保存的位),我们需要一个或多个数字或句点;把它们放在一个方括号里是完美而简单的。净效果是将
12.3.4
存储在变量
dotteddights
(如果找到)中,并生成一个布尔结果,表明它是否匹配(即,如果
条件下,可以将其有效地放在
条件下)

NB:正则表达式用大括号括起来,因为方括号也是Tcl语言的元字符;将RE放在大括号中可以避免误解脚本带来的麻烦。(你可以用反斜杠代替,但它们很难看…)