我知道我可以设置列表并使用foreach或循环来捕获1乘1。只是想知道是否有一种方法可以直接使用正则表达式?
示例: 字符串:
I_am_a_string
图案:am string str
if {[regexp -- {am} $string]} {
Do something here
}
如何将所有模式添加在一起,并且仅使用 1 个正则表达式来捕获字符串是否包含 1 个模式?
问题不是很清楚,但我认为它可能是在问如何同时测试多个模式。如果是这样,您可以执行以下操作:
if {[regexp -- {am|string|stuff} $string]} {
Do something here
}
regexp
可以处理的模式形式记录在https://www.tcl-lang.org/man/tcl/TclCmd/re_syntax.html
要一次获取字符串中的所有匹配项,可以使用
-all
选项到 regexp
,可能与 -inline
一起使用(除非您只想计算有多少个匹配项)。您可以获取匹配的文本(默认),或者找到它们的索引(如果您提供 -indices
选项)。然后,您通常会使用 foreach
来查看比赛结果列表;这是一个有效的组合。
这是一个例子:
set inputText "badaafaaagaaaahaaaaa"
foreach aSequence [regexp -all -inline {a+} $inputText] {
puts $aSequence
}
打印:
a
aa
aaa
aaaa
aaaaa
请注意,如果您在正则表达式中使用捕获括号,您可能需要
foreach
的多变量形式来检查结果。