PHP Extract Line - PullRequest
       9

PHP Extract Line

0 голосов
/ 28 июля 2010

Мне нужно извлечь «C: \ Documents and Settings» из последней строки этих данных:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
ExcludeSubDirs   REG_DWORD 0x1
ExtensionList  REG_SZ 
FirstAction          REG_DWORD 0x11
ThreatName          REG_SZ         C:\Documents and Settings
Owner          REG_DWORD 0x3
ProtectionTechnolog  REG_DWORD 0x1
SecondAction  REG_DWORD 0x11
DirectoryName  REG_SZ         C:\Documents and Settings

Как я могу извлечь "C: \ Documents and Settings" или любое другое значение, многократно использующее PHP?

Ответы [ 4 ]

1 голос
/ 28 июля 2010

Используйте регулярные выражения

$str = 'your string';
preg_match_all('!HKEY.+?DirectoryName\s+REG_SZ\s+([^\n]+)!s', $str."\nHKEY", $matches);
$dirs = @array_map('trim', $matches[1]); 

Ваши совпадения будут в массиве $dirs.
Вот рабочий пример: http://ideone.com/rdTOx

0 голосов
/ 28 июля 2010

Если это в Windows, вы можете получить доступ к значению напрямую через интерфейс COM:

$WshShell = new COM("WScript.Shell");
$result = $WshShell->RegRead(
    'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectoryName');

echo $result; // C:\Documents and Settings

Выше предполагается, что в данной позиции действительно есть ключ «DirectoryName».* И есть также этот класс (не могу сказать, если это хорошо):

0 голосов
/ 28 июля 2010

Я нашел это в Google.

Просто поместите строку, содержащую "DirectoryName" в функцию.

preg_match('DirectoryName.*', $str, $matches);
$directory_line = $matches[0];

http://samburney.com/blog/regular-expression-match-windows-or-unix-path

0 голосов
/ 28 июля 2010

Как-то так должно работать ...

$pattern = '#\*\*DirectoryName\s+REG_SZ\s+(.*?)\*\*#';
if (preg_match($pattern, $input, $output)) {
   print_r($output);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...