正则表达式 TCL 无法获取包含字符的整个单词

Regexp TCL unable to get entire word containing character

我是 TCL 的新手,我需要在 TLC 中使用正则表达式来提取其中包含 5 的所有数字

我拼了一个成功但是我不能用它因为它lsearch :

set x "55 6 90 5 89 105 7 85 191"  
puts [lsearch -all -inline -regexp $x {5} ]

这导致:

55 5 105 85

这是我想要使用正则表达式的地方

这是我能得到的最接近的:

puts [regexp -all -inline {9.+} $x]

我得到结果:

{90 5 89 105 7 85 191 }

显示不属于那里的额外单词

正则表达式 9.+ 将匹配字符串中的前 9 个字符以及随后的一个或多个字符的最长可能序列,直到字符串结束。 (但是,如果前 9 个字符是字符串中的最后一个字符,则不会匹配,因为要求至少有一个后续字符)。如果您只想匹配字符串中的单个 words 和其中的 9,您可以使用 0 个或多个非空白字符的序列,将文字 9(或 5,或其他任何内容)括起来):

% regexp -all -inline {\S*9\S*} $x
90 89 191
% regexp -all -inline {\S*5\S*} $x
55 5 105 85

如果您只想匹配包含 9 的数字,您可以匹配数字周围的可选数字并使用单词边界来防止部分匹配。 . 将匹配任何字符,并且会匹配太多。

\m\d*9\d*\M
  • \m 单词开头的单词边界
  • \d*9\d* 在可选数字之间匹配 9
  • \M 词尾的词边界

例如

set x "55 6 90 5 89 105 7 85 191"
regexp -all -inline {\m\d*9\d*\M} $x

输出

90 89 191