PHP是一种比拆分字符串更简单的方法

PHP是一种比拆分字符串更简单的方法,php,Php,我想知道是否有一种更简单、更好、更有效的方法来从字符串中提取数据,而不是将其拆分成多个片段并将这些片段存储在变量中。例如,我有一行包含一些/分隔的字段(注意:并非所有字段都是/分隔的) /ST=XX/L=XX/O=XX/CN=Cliento/ 我只需要获取CN字段的值。我现在做的就是: preg_match('/\/CN=[a-z_\-0-9].*\//i', $line, $client3); $client2 = split('=', $client3[0]);

我想知道是否有一种更简单、更好、更有效的方法来从字符串中提取数据,而不是将其拆分成多个片段并将这些片段存储在变量中。例如,我有一行包含一些/分隔的字段(注意:并非所有字段都是/分隔的)

/ST=XX/L=XX/O=XX/CN=Cliento/

我只需要获取CN字段的值。我现在做的就是:

       preg_match('/\/CN=[a-z_\-0-9].*\//i', $line, $client3);
       $client2 = split('=', $client3[0]);
       $client1 = split('/', $client2[1]);
       print 'Client: '. $client1[0]."\n";

但我相信有更好的解决方案。

您可以使用子字符串返回所需的匹配部分,而不是进行两次拆分:

$line = '/ST=XX/L=XX/O=XX/CN=Cliento/';
preg_match('/\/CN=[a-z_\-0-9].*\//i', $line, $matches);
echo substr($matches[0], 4, -1);

我会尝试使用一个正则表达式。下面的表达式可以很好地工作:

/(?<=CN\=)[a-zA-Z_\-0-9]+/

/(?
$values=array();parse_str(str_replace(“/”,“&”,$line),$values);var_dump($values);
这不是特定的ldap格式,而是一个日志文件,该行还包含带逗号的日期和其他文本。它的一部分有两个带/-s的字段,甚至还有我只需要一个字段的CN。