[英]how to match 2 digit in regexp in TCL?
我有以下字符串需要使用regexp进行匹配:
"The value is 0x0208 and the type is INTERNATION"
我想获取数字02和08,并将它们存储到不同的两个变量中,我使用以下regexp:
repexp "0x(\[0-9]+)\[^\\n]+INTERNALION" "The value is 0x0208 and the type is INTERNATION" whole first second
它无法获得第二个,该如何解决?
首先,将花括号用于正则表达式,这使它们更易于阅读,因为您不必使用额外的反斜杠。
其次,对数字使用\\ d可使表达式短一些,这也提高了可读性。
搜索数字对
在您的描述中,您说要搜索0x
两对数字。 这是一种简单的方法:
{0x(\d\d)(\d\d)}
这表示“ 0x,然后是我们捕获的两位数,然后是我们捕获的两位数”
搜索十六进制字符
通常,十六进制数字以0x
,这使我认为您实际上是在尝试解析十六进制数字。 如果是这样,您不仅需要搜索数字。 要匹配十六进制数字,您需要使用[0-9a-f]
。 一旦模式变得稍长(例如: [0-9a-f]
与\\d
),您就不想继续重复它,所以说“其中两个”的另一种方法是使用{2}
而不是重复图案。
将所有内容放在一起,以匹配两个两个十六进制数字的组,您可以使用如下所示的内容:
{0x([0-9a-f]{2})([0-9a-f]{2})}
处理大小写
请注意,此模式假定十六进制数字为小写。 如果您的特定数据可能包含大写字母,则至少有四种方法可以处理:
regexp
命令使用-nocase
选项 在这些中,最后一个可能是最不明显的解决方案,因此在这里我将介绍它。
Tcl表达式在模式的开头可以有一个特殊的序列,该序列可以修改正则表达式的工作方式。 在这种情况下,我们要告诉它忽略大小写。 这样做的方法是在模式的开头添加(?i)
:
{(?i)0x([0-9a-f]{2})([0-9a-f]{2})}
有关嵌入式选项的更多信息,请参见re_syntax手册页的metasyntax部分 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.