Reputation: 77
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
Reputation: 17637
I think this might be closer to what you want:
%\[quote=("|\')([\w]*)(?:;)(\d*)\]%s
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
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