2014-09-02 62 views
1

我想知道是否有更簡單,更好,更有效的方式從字符串中提取數據,而不是將其分割成塊並將這些塊存儲在變量中。例如,我有一行包含一些/分隔的字段(注意:並非所有字符都是/分隔的)。PHP比分割字符串更簡單

/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"; 

但我敢肯定有一個更好的解決方案。

+1

http://php.net/manual/en/function.ldap-explode-dn.php – 2014-09-02 10:36:24

+1

'$ values = array(); parse_str(str_replace('/','&',$ line),$ values); var_dump($ values);' – 2014-09-02 10:39:00

+0

這不是特定的ldap格式,而是一個日誌文件,該行還包含帶有逗號和其他文本的日期。只是其中一部分有幾個字段與/ -s,甚至從我只需要一個CN。 – munin24 2014-09-02 10:42:47

回答

0

比做兩個裂口相反,你可以只返回需要使用一個子串匹配的部分:

$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); 
0

我會嘗試這與一個正則表達式。下面的表達式工作正常:

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

這個指令表達式提取「CN =」後面的所有內容。還需要在乾草堆中有一個「CN =」。