为了账号安全,请及时绑定邮箱和手机立即绑定

php正则文件路径| 特定字符后的第二次匹配

php正则文件路径| 特定字符后的第二次匹配

PHP
呼如林 2021-08-21 10:02:41
我试图提取文本中没有磁盘字母的文件补丁。喜欢从AvastSecureBrowserElevationService; C:\Program Files (x86)\AVAST Software\Browser\Application\elevation_service.exe [X]提取:\Program Files (x86)\AVAST Software\Browser\Application\elevation_service.exe。我的实际正则表达式看起来像这样,但它会停在任何可以包含文件名的空间上。(?<=:\\)([^ ]*)我想出的解决方案是,我可以在点之后匹配第一个空格字符,因为在点之后会有一些带有空格的目录名称的可能性很小,而且我总是会进行快速的手动检查。但我不知道如何在正则表达式中写这个
查看完整描述

3 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

您可以为此目的使用此正则表达式:

(?<=[a-zA-Z]):[^.]+\.\S+

正则表达式演示

正则表达式详情:

  • (?<=[a-zA-Z]): Lookbehind 断言我们之前有一个英文字母 :

  • :: 匹配文字 :

  • [^.]+: 匹配 1+ 个非点字符

  • \.: 匹配文字 .

  • \S+: 匹配 1+ 个非空白字符


查看完整回答
反对 回复 2021-08-21
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

您可以使用以下正则表达式:

[A-Z]\K:.+\.\w+

它将匹配任何大写字母后跟:,然后是任何以 wit 结尾的字符串.,后跟至少一个单词字符。

\K 从匹配中删除它之前的内容。


查看完整回答
反对 回复 2021-08-21
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

在这里,我们将消耗我们的整个字符串,因为我们收集了我们希望输出的内容,我们将preg_replace:


.+C(:\\.+\..+?)\s.+

测试

$re = '/.+C(:\\.+\..+?)\s.+/m';

$str = 'AvastSecureBrowserElevationService; C:\\Program Files (x86)\\AVAST Software\\Browser\\Application\\elevation_service.exe [X]';

$subst = '$1';


$result = preg_replace($re, $subst, $str);


echo $result;


查看完整回答
反对 回复 2021-08-21
  • 3 回答
  • 0 关注
  • 218 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信