Извлечь несколько строк текста из строки PHP - PullRequest
1 голос
/ 22 июля 2010

У меня есть строка ключей реестра, которая выглядит следующим образом:

ThreatName REG_SZ c: \ temp Защитный код REG_SZ a Проверка ThreatName REG_SZ c: \ Windows Protection

Я хочу извлечьc: \ WHATEVER "из строки.Это происходит несколько раз между словами «ThreatName REG_SZ» и «Protection».

Как я могу извлечь «c: \ WHATEVER» несколько раз, используя PHP?

1 Ответ

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

Один из способов сделать это - использовать регулярные выражения, вот пример кода (не протестирован).


$string = "ThreatName REG_SZ c:\\temp Protection
Code REG_SZ c:\\a Check
ThreatName REG_SZ c:\\windows Protection";

preg_match_all("~.* REG_SZ (.*) ~iU", $string, $matches);

print_r($matches);

Если вы хотите узнать больше, см. Руководство по php: preg_match_all () .Или Google регулярные выражения для получения дополнительной информации о них.Но в основном он выглядит между REG_SZ и Protection (модификатор U делает его несвязным, поэтому он будет искать первую Protection) и возвращает все, кроме символа новой строки (. *).Если это распространяется на новые строки, модификатор 's' поможет решить эту проблему.

РЕДАКТИРОВАТЬ: увидел, что вы хотели их всех.Это должно работать для всех них.

РЕДАКТИРОВАТЬ: Исправлено регулярное выражение для включения «ThreatName», не уверен, если это динамический.Также добавлены дополнительные косые черты в строку, поскольку они были проанализированы как символы.

Я не уверен, придется ли вам использовать addlashes () в строке или нет, но это может быть необходимо.

Удален isset, поскольку он не был необходим.

EDIT: изменил код, учитывая, что правильное форматирование вывода было опущено.Обновленный метод будет работать, но если в каталоге есть пробел, скорее всего, он будет тянуть только первую часть каталога.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...