【发布时间】:2014-02-14 10:14:11
【问题描述】:
如何使用正则表达式匹配字符串中的第 n 次出现
set test {stackoverflowa 是一个最佳解决方案查找站点 stackoverflowb 是查找站点 stackoverflowc 的最佳解决方案 寻找最佳解决方案 sitestackoverflowd 是寻找最佳解决方案 sitestackoverflowe 是寻找网站的最佳解决方案}
regexp -all {stackoverflow} $test
上面给出“5”作为输出
regexp {stackoverflow} $test
上面给出的结果是stackoverflow,这里它匹配第一次出现的stackoverflow(即stackoverflowa
我的要求是我想从上面给定的字符串中匹配 第 5 次出现 stackoverflow(即)stackoverflow。
请有人澄清我的问题..谢谢
还有一个问题
【问题讨论】:
-
我相信你想匹配“包含stackoverflow第5次出现的整个单词”是吗?
-
第 5 次出现是最后一次出现。如果它们不是同一个东西,那么你需要
/(.*?(stackoverflow\S*)){5}/之类的东西,在捕获组2中回答。不知道tcl是否支持这样的语法。 -
支持语法,但结果有点不直观:正确的匹配存储在 second 匹配变量中。
-
@sln:为了完整和清晰:调用是
regexp {(.*?(stackoverflow\S*)){5}} $test m sm ssm。这会将第五次出现的“stackoverflow”(省略“e”)放在子匹配变量(调用中的ssm)中。
标签: regex tcl regex-greedy