O problema real da sua expressão regular é que ela não corresponde ao que deve corresponder. Para dividir:
-
.*/- qualquer caractere, várias vezes, seguido por uma barra. Isso basicamente consome a lista de diretórios antes do nome real do arquivo, portanto, ele corresponde literalmente a./(como no seu exemplo), mas também./some/other/dir/, até a última barra.Isso funciona porque as expressões regulares são "gananciosas" por padrão, o que significa que elas correspondem o máximo que podem. Em essência, essa parte permite que você pesquise apenas o nome real do arquivo e retire o caminho do resultado.
Para resumir, você precisa do
.*/na frente do regex se tudo o que importa é o nome real do arquivo. Se você precisar coincidir algumas partes do caminho com o arquivo, não será possível usar.*/ -
s_- funciona muito bem no seu exemplo -
[a-zA-Z]- isso só consome um caractere dessa classe -
_- seguido por um sublinhado -
[a-zA-Z]- novamente seguido por um caractere -
\.png- corresponde literalmente ao ponto e à extensão
Então, você precisa alterar sua regex para:
.*/s_[a-zA-Z]+_[a-zA-Z]+\.png
Você terá que usar o + , que basicamente diz um ou vários dos anteriores.