Regex for extracting filename from path

This is just a slight variation on @hmd's so you don't have to truncate the .

[ \w-]+?(?=\.)

Demo

Really, thanks goes to @hmd. I've only slightly improved on it.


Try this:

[^\\]+(?=\.pdf$)

It matches everything except back-slash followed by .pdf at the end of the string.

You can also (and maybe it's even better) take the part you want into the capturing group like that:

([^\\]+)\.pdf$

But how you refer to this group (the part in parenthesis) depends on the language or regexp flavor you're using. In most cases it'll be smth like $1, or \1, or the library will provide some method for getting capturing group by its number after regexp match.


This will get the filename but will also get the dot. You might want to truncate the last digit from it in your code.

[\w-]+\.

Update

@Geoman if you have spaces in file name then use the modified pattern below

[ \w-]+\.      (space added in brackets)

Demo


^\\(.+\\)*(.+)\.(.+)$

This regex has been tested on these two examples:

\var\www\www.example.com\index.php
\index.php

First block "(.+\)*" matches directory path.
Second block "(.+)" matches file name without extension.
Third block "(.+)$" matches extension.

Tags:

Regex