1

我正在尝试使用许可证 PHP 系统……我想向用户显示他们的许可证状态。许可证服务器给了我这个:

name=Service_Name;nextduedate=2013-02-25;status=Active

我需要像这样分离数据:

$name = “Service_Name”;
$nextduedate = “2013-02-25”;
$status = “Active”;

我有 2 天的时间想用 preg_match_all 解决这个问题,但我不能:(

4

3 回答 3

2

这可以很简单地在没有正则表达式的情况下解决。的使用explode()将对您有所帮助。

$str = "name=Service_Name;nextduedate=2013-02-25;status=Active";

$split = explode(";", $str);
$structure = array();

foreach ($split as $element) {
    $element = explode("=", $element);
    $$element[0] = $element[1];
}

var_dump($name);

尽管我敦促您改用数组。比发明不存在且未明确声明的变量更具可读性。

于 2012-11-26T18:55:02.970 回答
2

;如果您替换为 ,这基本上是一个查询字符串&。你可以parse_str()这样尝试:

$string = 'name=Service_Name;nextduedate=2013-02-25;status=Active';
parse_str(str_replace(';', '&', $string));

echo $name; // Service_Name
echo $nextduedate; // 2013-02-25
echo $status; // Active
于 2012-11-26T18:56:11.897 回答
0

听起来您只想将文本沿分号分成不同的行,在前面添加一个美元符号,然后添加空格和引号。我不确定您是否可以使用正则表达式一步完成(或者至少我不想考虑正则表达式会是什么样子),但您可以通过多个步骤来完成。

  1. 使用preg_split()将字符串沿分号拆分为一个数组。
  2. 循环遍历数组。
  3. 使用str_replace将每个 '=' 替换为 ' = "'。
  4. 使用字符串连接将 $ 添加到前面,将 "; 添加到每个字符串的末尾。

假设您的数据在数据中不包含引号、等号、分号等,这应该可行。如果是这样,您将不得不为此弄清楚解析规则。

于 2012-11-26T19:07:14.133 回答