从正则表达式中排除定界符
Exclude delimiter from regular expression
我对正则表达式还很陌生。
对于这样的字符串:
[quote="Username;123456]
我创建了这个正则表达式:
%\[quote=("|&\#039;|"|\'|)([^\r\n]*?)[^;](\d+)\]%s
这给出了 3 个匹配项:
- "
- 用户名;
- 23456
为什么 [^;]
不否定分号,而是删除一位数字,我该如何解决这个问题?谢谢
你的([^\r\n]*?)
可以吃掉;
,所以[^;]
可以随意取一个数字(因为它会匹配任何除了 ;
).
您可能想要 ;
(没有 [^ ]
:
%\[quote=("|&\#039;|"|\'|)([^\r\n]*?);(\d+)\]%s
我认为这可能更接近您想要的:
%\[quote=("|\')([\w]*)(?:;)(\d*)\]%s
你原来的模式有问题:
[^;]
(例如)告诉引擎匹配不是分号的东西,它不是 'negating' - 所以它捕获满足此条件的第一个数字事实上它不是分号
我对正则表达式还很陌生。 对于这样的字符串:
[quote="Username;123456]
我创建了这个正则表达式:
%\[quote=("|&\#039;|"|\'|)([^\r\n]*?)[^;](\d+)\]%s
这给出了 3 个匹配项:
- "
- 用户名;
- 23456
为什么 [^;]
不否定分号,而是删除一位数字,我该如何解决这个问题?谢谢
你的([^\r\n]*?)
可以吃掉;
,所以[^;]
可以随意取一个数字(因为它会匹配任何除了 ;
).
您可能想要 ;
(没有 [^ ]
:
%\[quote=("|&\#039;|"|\'|)([^\r\n]*?);(\d+)\]%s
我认为这可能更接近您想要的:
%\[quote=("|\')([\w]*)(?:;)(\d*)\]%s
你原来的模式有问题:
[^;]
(例如)告诉引擎匹配不是分号的东西,它不是 'negating' - 所以它捕获满足此条件的第一个数字事实上它不是分号