Rønny Schmatzler
Rønny Schmatzler

Reputation: 77

Exclude delimiter from regular expression

I'm pretty new at regular expressions. For a string like this:

[quote="Username;123456]

I have created this regular expression:

%\[quote=("|&\#039;|"|\'|)([^\r\n]*?)[^;](\d+)\]%s

This puts out 3 matches:

Why is [^;] not negating the semicolon, but instead removing one digit and how can I fix this? Thanks.

Upvotes: 1

Views: 3218

Answers (2)

SierraOscar
SierraOscar

Reputation: 17637

I think this might be closer to what you want:

%\[quote=("|\')([\w]*)(?:;)(\d*)\]%s

Regular expression visualization

Demo

The problem with your original pattern:

[^;] (for example) is telling the engine to match something that isn't a semi-colon, it's not 'negating' it - so it captures the first digit which meets this criteria due to the fact it's not a semi-colon

Upvotes: 1

Krzysztof Krasoń
Krzysztof Krasoń

Reputation: 27476

Your ([^\r\n]*?) can eat the ;, so the [^;] is free to take a digit (because it will match anything except the ;).

You probably wanted ; (without [^ ]:

%\[quote=("|&\#039;|"|\'|)([^\r\n]*?);(\d+)\]%s

Upvotes: 1

Related Questions