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

时间:2019-06-12 18:11:07

标签: php regex

我试图提取文本内没有磁盘字母的文件补丁。就像从AvastSecureBrowserElevationService; C:\Program Files (x86)\AVAST Software\Browser\Application\elevation_service.exe [X]中提取:\Program Files (x86)\AVAST Software\Browser\Application\elevation_service.exe

我的实际正则表达式看起来像这样,但是它将停在任何可以包含文件名的空间上。

(?<=:\\)([^ ]*)

我想出的解决方案是,我可以在点号后匹配第一个空格字符,因为极少有机会在目录名后加上点号后的空格,并且我将始终进行快速手动检查。但是我不知道该怎么用正则表达式来写

3 个答案:

答案 0 :(得分:3)

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

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

Shard-MW

RegEx详细信息:

  • (?<=[a-zA-Z]):在后面断言我们在:之前有一个英文字母
  • ::匹配文字:
  • [^.]+:匹配1个以上的非点字符
  • \.:匹配文字.
  • \S+:匹配1个以上非空格字符

答案 1 :(得分:1)

在这里,当我们收集要输出的内容时,我们将消耗整个字符串,并且我们将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;

Demo

答案 2 :(得分:1)

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

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

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

\K从比赛中删除比赛之前的比赛。

Demo