2014-09-02 5 views
1

Интересно, есть ли более простой, лучший и эффективный способ извлечения данных из строки, чем разбиение на куски и хранение этих частей в переменных. Например, у меня есть строка, которая содержит некоторые/разделенные поля (обратите внимание: не все из них разделены).PHP более простой способ, чем разбиение строки

/ST = XX/л = 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 –

+1

'$ values ​​= array(); parse_str (str_replace ('/', '&', $ line), $ values); var_dump ($ values); ' –

+0

Это не особый формат ldap, а файл журнала, строка также содержит дату с запятыми и другим текстом. Только одна часть его имеет пару полей с/-s и даже от тех, кому мне нужен только один, CN. – munin24

ответ

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 =».

Смежные вопросы