Tcl regexp match multiple target in 1 string问题

uurity8g  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(101)

我知道我可以设置列表并使用foreach或循环来捕获1 by 1。只是想知道是否有一种方法可以直接使用regexp?
例如:字符串:I_am_a_string模式:am string str

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

我怎么能把所有的模式加在一起,只使用1个正则表达式来捕捉字符串是否包含1个模式?

rseugnpd

rseugnpd1#

这个问题不是很清楚,但我认为它可能是问如何一次测试多个模式。如果是这样,你可以这样做:

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

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

qcbq4gxm

qcbq4gxm2#

要一次获取一个字符串中的所有匹配项,可以使用-all选项regexp,可能是-inline(除非您只想计算有多少个匹配项)。您可以获取匹配项的文本(默认),或者获取它们所在的索引(如果您给予-indices选项)。然后通常使用foreach来检查匹配结果列表;这是一个有效的组合。
下面是一个示例:

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

它打印:

a
aa
aaa
aaaa
aaaaa

请注意,如果在正则表达式中使用捕获括号,则可能希望foreach的多变量形式遍历结果。

相关问题