我目前正在构建一个具有回复功能的聊天系统。
如何匹配“@”符号和括号内的数字,例如:@123456789
这个在JavaScript中工作
/@\[(0-9_)+\]/g但是它不能在PHP中工作,因为它不能识别/g修饰符。所以我试了一下:
/\@\[[^0-9]\]/我有以下示例代码:
$example_message = 'Hi @[123456789] :)';
$msg = preg_replace('/\@\[[^0-9]\]/', '$1', $example_message);但是它不起作用,它无法捕捉到里面的数字。有什么建议吗?谢谢
发布于 2014-04-05 06:07:25
在regex中有一些核心问题,主要问题是否定角色类的^。因此,它不匹配任何数字,而是匹配任何数字。此外,PHP中不存在g 修饰符 (preg_replace()替换全局,您可以使用preg_match_all()来匹配全局表达式)。
您需要使用像/@\[(\d+)\]/这样的正则表达式来匹配(与组) @[和]之间的所有数字。
若要对PHP中的字符串执行全局操作,请使用preg_match_all()
preg_match_all('/@\[(\d+)\]/', 'Hi @[123456789] :)', $matches);
var_dump($matches);但是,如果不依赖匹配组(\d+),代码将更加简洁。相反,您可以使用诸如:(?<=@\[)\d+(?=\])之类的“查找器”。另外,如果每个字符串只有一个数字,则应该使用preg_match()而不是preg_match_all()。
注意:,我把这个示例放在了模糊的位置,并链接到了很多文档中,这样您就可以更好地阅读/学习。如果你有任何问题,请问。另外,如果您想要更好地解释所使用的正则表达式(特别是第二个带有旁观者的正则表达式),请让我知道,我很乐意详细说明。
发布于 2014-04-05 06:07:17
如果您想要在Javascript中生成g修饰符的行为,请在PHP中使用g函数。否则使用preg_match函数。
preg_match_all("/@\\[([0-9]+)\\]/", $example_message, $matches);解释:
/开口定界符
@匹配at标志
\\[匹配开始的方括号(元字符,因此需要转义)
(开始捕获
[0-9]匹配一个数字
+匹配前一次或多次
)停止捕获
\\]匹配结束方括号(元字符,因此需要转义)
/闭合定界符
现在,$matches[1]包含方括号中的所有数字。
https://stackoverflow.com/questions/22877218
复制相似问题