从字符串PHP中提取多行文本

从字符串PHP中提取多行文本,php,text,registry,Php,Text,Registry,我有一组注册表项,如下所示: ThreatName注册表项c:\temp Protection Code注册表项a检查ThreatName注册表项c:\windows保护 我想从字符串中提取“c:\WHATEVER”。它在“ThreatName REG_SZ”和“Protection”之间出现多次 如何使用PHP多次提取“c:\WHATEVER”?一种方法是使用正则表达式,下面是一个示例代码(未经测试) 如果您想了解更多信息,请参阅php手册:。或者谷歌正则表达式来获取更多关于它们的信息。但基本

我有一组注册表项,如下所示:

ThreatName注册表项c:\temp Protection Code注册表项a检查ThreatName注册表项c:\windows保护

我想从字符串中提取“c:\WHATEVER”。它在“ThreatName REG_SZ”和“Protection”之间出现多次


如何使用PHP多次提取“c:\WHATEVER”?

一种方法是使用正则表达式,下面是一个示例代码(未经测试)

如果您想了解更多信息,请参阅php手册:。或者谷歌正则表达式来获取更多关于它们的信息。但基本上它看起来介于REG_SZ和Protection之间(U修饰符使其取消冻结,因此它将查找第一个保护),并返回除新行字符(the.*)之外的所有内容。如果这分布在新行中,“s”修饰符将有助于解决此问题

编辑:看到你想要他们全部。这应该对他们所有人都有效

编辑:修复了正则表达式中包含“ThreatName”的问题,不确定这是否是动态的。还向字符串添加了额外的斜杠,因为它们被解析为字符

我不确定你是否需要在绳子上使用,但可能需要

移除了isset,因为它不是必需的


编辑:如果忽略了正确的输出格式,则修改了代码。更新后的方法可以工作,但是如果目录中有一个空格,那么它很可能只提取目录的第一部分

一种方法是使用正则表达式,下面是一个示例代码(未测试)

如果您想了解更多信息,请参阅php手册:。或者谷歌正则表达式来获取更多关于它们的信息。但基本上它看起来介于REG_SZ和Protection之间(U修饰符使其取消冻结,因此它将查找第一个保护),并返回除新行字符(the.*)之外的所有内容。如果这分布在新行中,“s”修饰符将有助于解决此问题

编辑:看到你想要他们全部。这应该对他们所有人都有效

编辑:修复了正则表达式中包含“ThreatName”的问题,不确定这是否是动态的。还向字符串添加了额外的斜杠,因为它们被解析为字符

我不确定你是否需要在绳子上使用,但可能需要

移除了isset,因为它不是必需的


编辑:如果忽略了正确的输出格式,则修改了代码。更新后的方法可以工作,但是如果目录中有一个空格,那么它很可能只提取目录的第一部分

稍微修改一下。我忘了windows斜杠充当转义\特殊字符。IE\t=tab。您可能需要使用addslashes,也可能不需要。但是上面修改过的代码应该可以满足您的需要,并且可能至少会给您一个工作示例,以便您可以相应地修改代码
empty($var)
对于设置为
NULL
或尚未初始化的变量,返回
TRUE
。是的,您是对的。我将进行相应的修改,我认为它会因为没有定义而抛出“notice”错误。EDIT:当我在PHP文件中编写字符串时,代码工作正常。示例:$string=“要分析的巨大字符串”;这很有效。但是,当我将您的代码与字符串一起用作变量时(未在文件($string=shell_exec('file.bat'.$arg);)中定义)我可以打印$string,但您的代码无法解析它。有什么想法吗?可能是当它打印出来时,它有额外的字符,而这些字符在您发布到此处时并不存在。如果您是通过web浏览器执行此操作,请查看源代码并将输出复制/粘贴到
标记中(您应该能够编辑原始帖子)为了更好地了解输出包含的内容以及如何正确解析它。对其进行了一些修改。我忘记了windows斜杠充当转义\特殊字符。IE\t=tab。您可能需要使用addslashes,也可能不需要。但是上面修改的代码应该满足您的需要,并且可能至少会给您一个工作示例,以便您能够n相应地修改代码。如果(!empty($matches[1]){},
empty($var)
对于设置为
NULL
,或尚未初始化的变量返回
TRUE
,则使用
就足够了。是的,你是对的。我会相应地修改,我想它会抛出一个“通知”未定义错误。编辑:当我在PHP文件中写入字符串时,代码可以正常工作。例如:$string=“要解析的巨大字符串”;这可以正常工作。但是,当我将字符串作为变量使用您的代码时(未在文件中定义($string=shell_exec('file.bat.$arg);)我可以打印$string,但您的代码无法解析它。有什么想法吗?可能是当它打印出来时,它有额外的字符,而这些字符在您发布到此处时并不存在。如果您是通过web浏览器执行此操作,请查看源代码并将输出复制/粘贴到
标记中(您应该能够编辑原始帖子)以便更好地了解输出包含的内容以及如何正确解析它。

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