从正则表达式

时间:2016-07-09 19:25:46

标签: php regex bbcode

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

[quote="Username;123456]

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

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

这推出了3场比赛:

  • 用户名;
  • 23456

为什么[^;]不能否定分号,而是删除一位数,我该如何解决?感谢。

2 个答案:

答案 0 :(得分:0)

([^\r\n]*?) ;可以吃掉[^;],因此;可以自由地取一个数字(因为它匹配除了 {{1} })。

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

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

答案 1 :(得分:0)

我认为这可能更接近你想要的东西:

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

Regular expression visualization

Demo

原始模式的问题:

[^;](例如)正在告诉引擎匹配不是分号的东西,它不是“否定”#39;否则'否定'它 - 所以它捕获满足这个标准的第一个数字,因为它不是一个分号