Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.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 foreach与preg_replace仅输出1个结果_Php - Fatal编程技术网

Php foreach与preg_replace仅输出1个结果

Php foreach与preg_replace仅输出1个结果,php,Php,我的foreach和preg\u replace()有问题。我有一个文本字符串,希望使用preg_replace()提取@符号后面的所有单词,然后创建一个数组,然后使用该数组将每个值提交到数据库中 目前只输出第一个结果。你能帮我解决这个问题吗?:) 使用preg\u match\u all代替: -执行全局正则表达式匹配 $status['message'] = 'Hello I would like to tag @james and @bob and @barry'; preg_match_

我的
foreach
preg\u replace()
有问题。我有一个文本字符串,希望使用
preg_replace()
提取
@
符号后面的所有单词,然后创建一个数组,然后使用该数组将每个值提交到数据库中

目前只输出第一个结果。你能帮我解决这个问题吗?:)


使用
preg\u match\u all
代替:

-执行全局正则表达式匹配

$status['message'] = 'Hello I would like to tag @james and @bob and @barry';
preg_match_all('/(?<=@)\S+/i', $status['message'], $match);

foreach(reset($match) as $tag) {
    // insert each result into database
    echo $tag . '<br/>';
}
$status['message']=“你好,我想标记@james and@bob and@barry”;
preg_match_all('/(?好吧,
preg_match()
只会吐出第一个结果。找到第一个结果后,它会停止。如果你知道的话

如果你想得到所有的匹配,那么你必须使用

您的正则表达式也没有经过很好的考虑。只要它不包含空格字符,它几乎可以匹配任何内容(包括无效标记)。例如,像
@!##%
之类的内容将被匹配

在编写正则表达式时,通常最好总是尽可能严格限制。换句话说,它应该只匹配您需要的内容;使用通配符,如
\S+
,它匹配除少数字符以外的所有字符,很少是一个好主意

这样做是一种改进。但是,它将匹配可能不应该匹配的内容(如
@user
中的
@@user~

$regex='/(?
$status['message'] = 'Hello I would like to tag @james and @bob and @barry';
preg_match_all('/(?<=@)\S+/i', $status['message'], $match);

foreach(reset($match) as $tag) {
    // insert each result into database
    echo $tag . '<br/>';
}
$regex = '/(?<=@)[a-zA-Z0-9_]+/';