PHP正则表达式提取括号内的数字
我目前正在建立一个具有回复功能的聊天系统 如何匹配“@”符号和括号内的数字,例如:@[123456789] 这一个在JavaScript中工作PHP正则表达式提取括号内的数字,php,regex,Php,Regex,我目前正在建立一个具有回复功能的聊天系统 如何匹配“@”符号和括号内的数字,例如:@[123456789] 这一个在JavaScript中工作 /@\[(0-9_)+\]/g 但它在PHP中不起作用,因为它无法识别/g修饰符。所以我试了一下: /\@\[[^0-9]\]/ 我有以下示例代码: $example_message = 'Hi @[123456789] :)'; $msg = preg_replace('/\@\[[^0-9]\]/', '$1', $example_messag
/@\[(0-9_)+\]/g
但它在PHP中不起作用,因为它无法识别/g修饰符。所以我试了一下:
/\@\[[^0-9]\]/
我有以下示例代码:
$example_message = 'Hi @[123456789] :)';
$msg = preg_replace('/\@\[[^0-9]\]/', '$1', $example_message);
但它不起作用,它无法捕获@[]内的数字。有什么建议吗?如果您想在Javascript中生成g
修饰符的行为,请使用PHP中的函数。否则请使用该函数
preg_match_all("/@\\[([0-9]+)\\]/", $example_message, $matches);
说明:/
开头分隔符@
匹配at标志\\[
匹配开头的方括号(元字符,因此需要转义)(
开始捕获[0-9]
匹配一个数字+
匹配上一个或多个)
停止捕获\\]
匹配结束方括号(元字符,因此需要转义)/
结束分隔符
现在,
$matches[1]
包含方括号内的所有数字。您的正则表达式中存在一些核心问题,主要问题是否定字符类的^
。因此,它不匹配任何数字,而是匹配除数字以外的任何数字。另外,PHP中不存在g
(全局替换,您可以使用它全局匹配表达式)
您需要使用正则表达式来匹配(与组)@[
和]
之间的所有数字
要在PHP中对字符串全局执行此操作,请使用preg\u match\u all()
:
但是,如果您不依赖匹配组(\d+)
,您的代码会更干净。相反,您可以使用“lookarounds”,如:。此外,如果每个字符串只有一个数字,则应使用notpreg\u match\u all()
注意:我把示例留得模糊不清,并链接了大量文档,以便您更好地阅读/学习。如果你有任何问题,请提问。另外,如果您想对所使用的正则表达式(特别是第二个带lookarounds的正则表达式)有更好的解释,请告诉我,我很乐意详细说明。您的问题是字符类中的
^
查找负数(因此[^0-9]
只查找数字)。Real answer incoming….另外,您的JS正则表达式应该是/\[[0-9\]+\]/g
(如果方括号内没有下划线,请删除下划线)。
preg_match_all('/@\[(\d+)\]/', 'Hi @[123456789] :)', $matches);
var_dump($matches);