正则表达式PHP - 不匹配特定字符串后跟数字

时间:2014-08-05 11:45:42

标签: php regex

我循环遍历目录中的大量文件,并希望提取文件名中的所有数值lin64exe,例如,lin64exe005458002.17将匹配005458002.17 。我对此部分进行了排序,但在目录中还有其他文件,例如part005458和其他文件。我怎样才能这样做,所以我只在lin64exe之后得到数字(和。)?

这是我到目前为止所做的:

[^lin64exe][^OTHERTHINGSHERE$][0-9]+

3 个答案:

答案 0 :(得分:2)

正则表达式将小数点的数字与lin64exe之后的小数点相匹配,

^lin64exe\K\d+\.\d+$

DEMO

<?php
$mystring = "lin64exe005458002.17";
$regex = '~^lin64exe\K\d+\.\d+$~';
if (preg_match($regex, $mystring, $m)) {
    $yourmatch = $m[0]; 
    echo $yourmatch;
    }
?> //=> 005458002.17

答案 1 :(得分:1)

您可以使用此正则表达式并使用捕获的组#1作为您的号码:

^lin64exe\D*([\d.]+)$

RegEx Demo

<强>代码:

$re = '/^lin64exe\D*([\d.]+)$/i'; 
$str = "lin64exe005458002.17\npart005458"; 

if ( preg_match($re, $str, $m) )
    var_dump ($m[1]);

答案 2 :(得分:1)

您也可以尝试环顾四周

(?<=^lin64exe)\d+(\.\d+)?$

这是demo

模式说明:

  (?<=                     look behind to see if there is:
    ^                        the beginning of the string
    lin64exe                 'lin64exe'
  )                        end of look-behind

  \d+                      digits (0-9) (1 or more times (most possible))
  (                        group and capture to \1 (optional):
    \.                       '.'
    \d+                      digits (0-9) (1 or more times (most possible))
  )?                       end of \1

  $                        the end of the string

注意:使用i进行忽略大小写

示例代码:

$re = "/(?<=^lin64exe)\\d+(\\.\\d+)?$/i";
$str = "lin64exe005458002.17\nlin64exe005458002\npart005458";

preg_match_all($re, $str, $matches);