TCL 正则表达式匹配 1 个字符串中的多个目标问题

问题描述 投票:0回答:2

我知道我可以设置列表并使用foreach或循环来捕获1乘1。只是想知道是否有一种方法可以直接使用正则表达式?

示例: 字符串:

I_am_a_string
图案:
am string str

if {[regexp -- {am} $string]} {
    Do something here
}

如何将所有模式添加在一起,并且仅使用 1 个正则表达式来捕获字符串是否包含 1 个模式?

regex tcl
2个回答
2
投票

问题不是很清楚,但我认为它可能是在问如何同时测试多个模式。如果是这样,您可以执行以下操作:

if {[regexp -- {am|string|stuff} $string]} {
    Do something here
}

regexp
可以处理的模式形式记录在https://www.tcl-lang.org/man/tcl/TclCmd/re_syntax.html


0
投票

要一次获取字符串中的所有匹配项,可以使用

-all
选项到
regexp
,可能与
-inline
一起使用(除非您只想计算有多少个匹配项)。您可以获取匹配的文本(默认),或者找到它们的索引(如果您提供
-indices
选项)。然后,您通常会使用
foreach
来查看比赛结果列表;这是一个有效的组合。

这是一个例子:

set inputText "badaafaaagaaaahaaaaa"
foreach aSequence [regexp -all -inline {a+} $inputText] {
    puts $aSequence
}

打印:

a
aa
aaa
aaaa
aaaaa

请注意,如果您在正则表达式中使用捕获括号,您可能需要

foreach
的多变量形式来检查结果。

© www.soinside.com 2019 - 2024. All rights reserved.