Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP正则表达式提取括号内的数字_Php_Regex - Fatal编程技术网

PHP正则表达式提取括号内的数字

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

我目前正在建立一个具有回复功能的聊天系统

如何匹配“@”符号和括号内的数字,例如:@[123456789]

这一个在JavaScript中工作

/@\[(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”,如:。此外,如果每个字符串只有一个数字,则应使用not
preg\u match\u all()


注意:我把示例留得模糊不清,并链接了大量文档,以便您更好地阅读/学习。如果你有任何问题,请提问。另外,如果您想对所使用的正则表达式(特别是第二个带lookarounds的正则表达式)有更好的解释,请告诉我,我很乐意详细说明。

您的问题是字符类中的
^
查找负数(因此
[^0-9]
只查找数字)。Real answer incoming….另外,您的JS正则表达式应该是
/\[[0-9\]+\]/g
(如果方括号内没有下划线,请删除下划线)。
preg_match_all('/@\[(\d+)\]/', 'Hi @[123456789] :)', $matches);
var_dump($matches);