Php 有效地分解和修剪长串,形成单个阵列

Php 有效地分解和修剪长串,形成单个阵列,php,arrays,regex,explode,Php,Arrays,Regex,Explode,我正在尝试创建一个消息传递系统,您可以在其中同时向单个或多个用户发送消息。 从我的表单中传递的值如下所示: <Username One(1)><Username Two(2)><Username Three(3)> Array[0] = 1 Array[1] = 2 Array[2] = 3 我试过使用explode(“>”,$input\u value)然后使用preg_match进行修剪。 然而,我最终得到了两个独立的数组。如何将这两者结合起来,得到我

我正在尝试创建一个消息传递系统,您可以在其中同时向单个或多个用户发送消息。 从我的表单中传递的值如下所示:

<Username One(1)><Username Two(2)><Username Three(3)>
Array[0] = 1
Array[1] = 2
Array[2] = 3
我试过使用
explode(“>”,$input\u value)然后使用
preg_match
进行修剪。 然而,我最终得到了两个独立的数组。如何将这两者结合起来,得到我想要的结果?我需要它是尽可能有效的,因为每个用户应该能够在同一时间消息的最大数量的用户。 另外,我希望您能对正则表达式进行简单易懂的解释,因为我觉得它有点混乱。

您可以使用:

$s = '<Username One(1)><Username Two(2)><Username Three(3)>';    
preg_match_all('~\b[\p{L}\p{N}]+(?=\h*\)>)~u', $s, $m);    
print_r($m[0]);

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)
$s='';
preg\u match\u all('~\b[\p{L}\p{N}]+(?=\h*\)>)~u',$s,$m);
印刷费($m[0]);
排列
(
[0] => 1
[1] => 2
[2] => 3
)

(?=\h*\)>
是一个正向的前瞻,它匹配
)>

之前的单词,因为1,2,3是字符串中的数字。因此,您可以从字符串中获取所有数字

<?php
$str="<Username One(1)><Username Two(2)><Username Three(3)>";
preg_match_all('!\d+!', $str, $matches);
print_r($matches[0]);

你在标记中得到值了吗?我在括号中得到值了,是的。你为什么不使用json或xml这样的现有数据结构呢?有一些现有的方法/扩展可以使用它们(比如
json_decode()
和SimpleXML)。@JasperN.Brouwer我以前从未使用过这些方法/扩展。我可以看看。感谢您的提醒:)如果用户使用数字注册,这不会成为未来的证据。或者我错了吗?即使用户注册时使用的是唯一的字母,如中文,并且用户名中有数字,这也行得通。我使用的是:
$msg_all_receiver=$_POST['receiver'];preg\u match\u all(“~\b\w+(?=\)>)~”,$msg\u all\u receivers,$msg\u all\u receivers\u exp)并与以下内容进行了回显:
回显$msg_all_receivers_exp[0]。$msg_all_receivers_exp[1]
但是,我得到了错误消息:
注意:未定义的偏移量:第328行的/home/connecti/www/projects/send_message.php中的1
后跟
数组
必须使用:
echo$msg_all_receivers_exp[0][0]。$msg_all_receivers_exp[0][1]另请参阅unicode支持的更新答案。啊,okai,谢谢。count()是否适用于参考底图阵列?还是只算1?所以我会做
$count=count($m[0])
preg_match_all("/\((.*?)\)/", $str, $matches);

print_r($matches[0]);