Php 使用preg_match和regex在html表中显示字符串的内容

Php 使用preg_match和regex在html表中显示字符串的内容,php,regex,preg-replace,Php,Regex,Preg Replace,我有一个字符串,其中包含由管道隔离的ASL用户 我的字符串: Jack:22:m:london,uk|john:20:m:otava, canada|ketty:26:f:san fransisco|patricia:19:f:guatemala city 我的正则表达式: /([A-Za-z]+):([0-9]+):([A-Za-z]):([^|]+/ 我想在html表格中的网页上显示这些ASL jack 22 m london,uk john 20 m otava canada

我有一个字符串,其中包含由管道隔离的ASL用户

我的字符串:

  Jack:22:m:london,uk|john:20:m:otava, canada|ketty:26:f:san fransisco|patricia:19:f:guatemala city
我的正则表达式:

 /([A-Za-z]+):([0-9]+):([A-Za-z]):([^|]+/
我想在html表格中的网页上显示这些ASL

jack 22 m london,uk
john 20 m otava canada
我的代码:

    $users="Jack:22:m:london,uk|john:20:m:otava, canada|ketty:26:f:san fransisco|patricia:19:f:guatemala city";

  echo preg_replace('/([A-Za-z]+):([0-9]+):([A-Za-z]):([^|]+)/','<table border="1"><tr><td>$1</td><td>$2</td><td>$3</td><td>$4</td></tr></table>',$users);
$users=“杰克:22:m:英国伦敦|约翰:20:m:加拿大奥塔瓦|凯蒂:26:f:旧金山|帕特里夏:19:f:危地马拉城”;
echo preg_replace('/([A-Za-z]+):([0-9]+):([A-Za-z]):([^ |]+)/',“$1$2$3$4',$users);
它按预期工作,但管道已包含在输出中

您可以在上看到我的代码的实时演示


我的正则表达式有什么问题吗?

使用preg\u replace时,您的正则表达式根本不会触及
字符,因此只会将其保留在那里。 一个简单的解决方案是使用单个
|
字符(如果它位于当前正则表达式模式的末尾):

/([A-Za-z]+):([0-9]+):([A-Za-z]):([^\\\\]+)\\\\?/
(在末尾添加了
\\\\\?


请记住,
字符也应该转义(
\\124;
)。

如果我是你,我只需将管道替换为
,将分号替换为

$users=“杰克:22:m:英国伦敦|约翰:20:m:加拿大奥塔瓦|凯蒂:26:f:旧金山|帕特里夏:19:f:危地马拉城”;
回声“
. strtr($users,['|'=>'',:'=>'')
. '';

(注意:我认为您不希望每条记录都有一个不同的表,因此我将所有记录都放在同一个表中,每个记录都有一行)。

如果您的数据只包含
作为用户分隔符,而
作为用户详细信息分隔符,您可以使用2个
分解
如下:

$users="Jack:22:m:london,uk|john:20:m:otava, canada|ketty:26:f:san fransisco|patricia:19:f:guatemala city";
$usr_arr = explode('|', $users);
foreach ($usr_arr as $usr)
{
    $parts = explode(':', $usr);
    echo '<table border="1"><tr><td>'.$parts[0].'</td><td>'.$parts[1].'</td><td>'.$parts[2].'</td><td>'.$parts[3].'</td></tr></table>'.PHP_EOL;
}
$users=“杰克:22:m:英国伦敦|约翰:20:m:加拿大奥塔瓦|凯蒂:26:f:旧金山|帕特里夏:19:f:危地马拉城”;
$usr_arr=explode(“|”,$users);
foreach($usr\u arr as$usr)
{
$parts=分解(“:”,$usr);
回显“.$parts[0]”.$parts[1]”.$parts[2]”.$parts[3]”.PHP_EOL;
}

输出:

<table border="1"><tr><td>Jack</td><td>22</td><td>m</td><td>london,uk</td></tr></table>
<table border="1"><tr><td>john</td><td>20</td><td>m</td><td>otava, canada</td></tr></table>
<table border="1"><tr><td>ketty</td><td>26</td><td>f</td><td>san fransisco</td></tr></table>
<table border="1"><tr><td>patricia</td><td>19</td><td>f</td><td>guatemala city</td></tr></table>
Jack22mlondon,英国
约翰20莫塔瓦,加拿大
凯蒂26FSAN弗朗西斯公司
马拉市帕特里夏酒店

我最终使用了Explode()函数。它比正则表达式容易。谢谢。是的,我也觉得在这种情况下比正则表达式简单。如果您对此解决方案有任何问题,请随时在此发表评论。
<table border="1"><tr><td>Jack</td><td>22</td><td>m</td><td>london,uk</td></tr></table>
<table border="1"><tr><td>john</td><td>20</td><td>m</td><td>otava, canada</td></tr></table>
<table border="1"><tr><td>ketty</td><td>26</td><td>f</td><td>san fransisco</td></tr></table>
<table border="1"><tr><td>patricia</td><td>19</td><td>f</td><td>guatemala city</td></tr></table>