如何在第n次出现分隔符后匹配指定的字符

时间:2017-03-31 08:48:37

标签: regex string

我刚刚在regex101上测试了一个正则表达式并得到了一些意想不到的结果。我试过的表达是

^[^-]*(?:-[^-]*){1}\Kt

在这个字符串上

this is a test - try to split -this- string - into its substrings

regex101上的匹配结果是" t"在单词“#34; split"

的结尾处
  

这是一个测试 - 尝试将 t -this- string - 放入其子串中

为什么它没有返回第一个" t"在单词"尝试"?

  

这是一个测试 - t ry将-this- string - 拆分为其子串

1 个答案:

答案 0 :(得分:1)

这里有几点需要注意:

  • [^-]匹配t*贪婪量词与其找到的最后t匹配
  • 可以将t添加到否定字符类,以匹配第一个t, or make lazy with
  • {1}限制量词是多余的,因为每个模式原子默认匹配一次
  • 将非捕获组仅用于其中的一个分支或没有量词
  • 是没有意义的

使用

^[^-]*-[^-]*?\Kt

^[^-]*-[^-t]*\Kt