我目前正在构建一个具有回复功能的聊天系统.
如何匹配'@'符号和括号内的数字,例如:@ [123456789]
这个适用于JavaScript
/@\[(0-9_)+\]/g
Run Code Online (Sandbox Code Playgroud)
但它在PHP中不起作用,因为它无法识别/ g修饰符.所以我尝试了这个:
/\@\[[^0-9]\]/
Run Code Online (Sandbox Code Playgroud)
我有以下示例代码:
$example_message = 'Hi @[123456789] :)';
$msg = preg_replace('/\@\[[^0-9]\]/', '$1', $example_message);
Run Code Online (Sandbox Code Playgroud)
但它不起作用,它不会捕获@ []内的那些数字.有什么建议?谢谢
你的正则表达式中有一些核心问题,主要的^是否定你的角色类.因此,而不是[^0-9]匹配任何数字,它匹配任何东西,但一个数字.此外,PHP中不存在g 修饰符(preg_replace()全局替换,您可以使用preg_match_all()全局匹配表达式).
你要使用正则表达式想/@\[(\d+)\]/匹配(一组)所有的数字之间@[和].
要在PHP中的字符串上全局执行此操作,请使用preg_match_all():
preg_match_all('/@\[(\d+)\]/', 'Hi @[123456789] :)', $matches);
var_dump($matches);
Run Code Online (Sandbox Code Playgroud)
但是,如果您不依赖匹配组,则代码会更清晰(\d+).相反,你可以使用"lookarounds",如:(?<=@\[)\d+(?=\]).另外,如果你只会有每串一个数字,你应该使用preg_match()没有preg_match_all().
注意:我将示例模糊不清并链接到大量文档,以便您可以更好地阅读/学习.如果您有任何问题,请询问.另外,如果你想对所使用的正则表达式(特别是第二个带有外观的表达式)有更好的解释,请告诉我,我很乐意详细说明.