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.