正则表达式不像我期望的那样匹配



我有以下字符串:connect_2014-06-03.csv和以下正则表达式:(S+)[_-]

我想做的是只提取第一个单词,即connect从字符串,但由于某种原因,正则表达式匹配connect_2014-06-。我试图通过做(S+)[_-]?使它不贪婪,但这似乎不起作用。

有人知道吗?

这是+是贪婪的,而不是整个正则表达式。您需要修改捕获组中的S+,使其不那么贪婪。

(S+?)[_-]

请参阅此regex101。

也许不使用任何非空白字符是有意义的,而只是使用([a-z]+)_ ?请记住,破折号和下划线也不是空格。

您可以使用BASH字符串操作来代替正则表达式:

s='connect_2014-06-03.csv'
echo "${s%%_*}"
connect

使用正则表达式可以使用:

[[ "$s" =~ ^([^_]+) ]] && echo "${BASH_REMATCH[1]}"
connect

有两个简单的解决方案。

您可以通过在量词中添加?来显式地声明您想要非贪婪。

(S+?)[_-]

或者你可以让你的字符类限制自己:

([^_-s]*)

最新更新