从正则表达式中排除定界符

Exclude delimiter from regular expression

我对正则表达式还很陌生。 对于这样的字符串:

[quote="Username;123456]

我创建了这个正则表达式:

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

这给出了 3 个匹配项:

为什么 [^;] 不否定分号,而是删除一位数字,我该如何解决这个问题?谢谢

你的([^\r\n]*?)可以吃掉;,所以[^;]可以随意取一个数字(因为它会匹配任何除了 ;).

您可能想要 ;(没有 [^ ]:

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

我认为这可能更接近您想要的:

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

Demo

你原来的模式有问题:

[^;](例如)告诉引擎匹配不是分号的东西,它不是 'negating' - 所以它捕获满足此条件的第一个数字事实上它不是分号