首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP Regex提取括号内的数字

PHP Regex提取括号内的数字
EN

Stack Overflow用户
提问于 2014-04-05 06:04:08
回答 2查看 3.1K关注 0票数 3

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

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

这个在JavaScript中工作

代码语言:javascript
复制
/@\[(0-9_)+\]/g

但是它不能在PHP中工作,因为它不能识别/g修饰符。所以我试了一下:

代码语言:javascript
复制
/\@\[[^0-9]\]/

我有以下示例代码:

代码语言:javascript
复制
$example_message = 'Hi @[123456789] :)';

$msg = preg_replace('/\@\[[^0-9]\]/', '$1', $example_message);

但是它不起作用,它无法捕捉到里面的数字。有什么建议吗?谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-05 06:07:25

在regex中有一些核心问题,主要问题是否定角色类的^。因此,它不匹配任何数字,而是匹配任何数字。此外,PHP中不存在g 修饰符 (preg_replace()替换全局,您可以使用preg_match_all()来匹配全局表达式)。

您需要使用像/@\[(\d+)\]/这样的正则表达式来匹配(与组) @[]之间的所有数字。

若要对PHP中的字符串执行全局操作,请使用preg_match_all()

代码语言:javascript
复制
preg_match_all('/@\[(\d+)\]/', 'Hi @[123456789] :)', $matches);
var_dump($matches);

但是,如果不依赖匹配组(\d+),代码将更加简洁。相反,您可以使用诸如:(?<=@\[)\d+(?=\])之类的“查找器”。另外,如果每个字符串只有一个数字,则应该使用preg_match()而不是preg_match_all()

注意:,我把这个示例放在了模糊的位置,并链接到了很多文档中,这样您就可以更好地阅读/学习。如果你有任何问题,请问。另外,如果您想要更好地解释所使用的正则表达式(特别是第二个带有旁观者的正则表达式),请让我知道,我很乐意详细说明。

票数 6
EN

Stack Overflow用户

发布于 2014-04-05 06:07:17

如果您想要在Javascript中生成g修饰符的行为,请在PHP中使用g函数。否则使用preg_match函数。

代码语言:javascript
复制
preg_match_all("/@\\[([0-9]+)\\]/", $example_message, $matches);

解释:

/开口定界符

@匹配at标志

\\[匹配开始的方括号(元字符,因此需要转义)

(开始捕获

[0-9]匹配一个数字

+匹配前一次或多次

)停止捕获

\\]匹配结束方括号(元字符,因此需要转义)

/闭合定界符

现在,$matches[1]包含方括号中的所有数字。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22877218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档