在位置PHP之前在字符串中查找字符

时间:2013-09-21 12:01:45

标签: php regex string

我有一个字符串$data = "Name Email ID DOB, Name Email ID DOB, Name Email ID DOB, etc."(包含实际名称,电子邮件ID和DOB数据)

我想根据ID从字符串中提取这些值集中的一个。所以我想要做的是使用strpos(ID)来获取字符串中ID的位置,但是我想提取一个从ID之前的第一个逗号开始的子字符串,并在它之后的第一个逗号结束

例如,$data = "John Doe j@d.com 123 1/01/91, Mary Doe m@d.com 124 1/02/82, Jack Doe ja@d.com 125 1/05/67";。我有$id = 124;,所以我想获得子串$substr = "Mary Doe m@d.com 124 1/02/82";

在PHP中执行此操作的最佳方式是什么?

6 个答案:

答案 0 :(得分:5)

我在这里为您提供搜索算法:

  1. 使用逗号分割原始字符串并获取令牌数组
  2. 遍历数组并找到匹配ID
  3. 的数组元素

答案 1 :(得分:1)

您可以使用正则表达式,该ID与您的ID周围尽可能多的非逗号字符匹配。单个非逗号字符可与[^,]匹配。

preg_match('/[^,]* '.$id.' [^,]*/', $input, $match);
// your result will be in $match[0]

请注意,如果$id可以包含除数字之外的其他字符,则将其连接到正则表达式可能会很危险。在这种情况下,请使用preg_quote($id, '/')代替(这将转义任何元字符)。

答案 2 :(得分:1)

如果您知道您搜索的第一个ID和ID。

只需$result = explode("," $data);

并减去您搜索的ID和第一个ID。

$index = $idSearch - $FirstId;

$result[$index];

答案 3 :(得分:1)

为了与众不同,您还可以使用str_getcsv()代替explode()

<?php
$data = "John Doe j@d.com 123 1/01/91, Mary Doe m@d.com 124 1/02/82, Jack Doe ja@d.com 125 1/05/67";

$records = str_getcsv($data);

foreach ($records as $record) {
    $fields = str_getcsv($record, ' ');

    if ($fields[4] == 124) {
        echo $record, "\n";
        break;
    }
}

输出:

 Mary Doe m@d.com 124 1/02/82

答案 4 :(得分:0)

我可能将explode(拆分)字符串放到逗号上的数组中,然后通过foreach运行数组,爆炸空间上的每个元素,同时检查新创建的子该特定id的数组。

但是,你可能会以不同的方式存储这些数据。 (像数据库)

答案 5 :(得分:0)

使用explode()将字符串转换为数组然后简单地遍历该数组并将id与数组元素匹配。我希望这能解决你的问题