我循环遍历目录中的大量文件,并希望提取文件名中的所有数值lin64exe
,例如,lin64exe005458002.17
将匹配005458002.17
。我对此部分进行了排序,但在目录中还有其他文件,例如part005458
和其他文件。我怎样才能这样做,所以我只在lin64exe
之后得到数字(和。)?
这是我到目前为止所做的:
[^lin64exe][^OTHERTHINGSHERE$][0-9]+
答案 0 :(得分:2)
正则表达式将小数点的数字与lin64exe
之后的小数点相匹配,
^lin64exe\K\d+\.\d+$
<?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.]+)$
<强>代码:强>
$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);