Royi Namir
Royi Namir

Reputation: 148744

Regex Last occurrence?

I'm trying to catch the last part after the last backslash
I need the \Web_ERP_Assistant (with the \)

My idea was :

C:\Projects\Ensure_Solution\Assistance\App_WebReferences\Web_ERP_WebService\Web_ERP_Assistant


\\.+?(?!\\)      //  I know there is something with negative look -ahead `(?!\\)`

But I can't find it.

[Regexer Demo]

Upvotes: 203

Views: 407732

Answers (7)

Katja
Katja

Reputation: 867

If you don't want to include the backslash, but only the text after it, try this: ([^\\]+)$ or for unix: ([^\/]+)$

Upvotes: 12

shA.t
shA.t

Reputation: 16978

I used below regex to get that result also when its finished by a \

(\\[^\\]+)\\?$

[Regex Demo]

Upvotes: 4

Jeeter
Jeeter

Reputation: 6105

One that worked for me was:

.+(\\.+)$

Try it online!

Explanation:

.+     - any character except newline
(      - create a group
 \\.+   - match a backslash, and any characters after it
)      - end group
$      - this all has to happen at the end of the string

Upvotes: 142

TimE
TimE

Reputation: 2887

A negative look ahead is a correct answer, but it can be written more cleanly like:

(\\)(?!.*\\)

This looks for an occurrence of \ and then in a check that does not get matched, it looks for any number of characters followed by the character you don't want to see after it. Because it's negative, it only matches if it does not find a match.

Upvotes: 68

SERPRO
SERPRO

Reputation: 10067

What about this regex: \\[^\\]+$

Upvotes: 12

stema
stema

Reputation: 93086

Your negative lookahead solution would e.g. be this:

\\(?:.(?!\\))+$

See it here on Regexr

Upvotes: 161

Michael Krelin - hacker
Michael Krelin - hacker

Reputation: 143299

You can try anchoring it to the end of the string, something like \\[^\\]*$. Though I'm not sure if one absolutely has to use regexp for the task.

Upvotes: 33

Related Questions