文件名正则表达式提取

我想获取部分文件名</ p>

文件名 blabla_2009-001_name_surname-name_surname </ code> </ p>

我想得到:2009-001,name_surname,name_surname </ p>

我来了 用这个,但它没有用</ p>

  preg_match(“/(?:[0-9  - ] {8})_(?:[a-z _] +)  - (?:[a-z _] +)/“,$ filename,$ matches); 
</ code> </ pre>

任何指针?</ p>

< p>谢谢!
BR </ p>
</ div>

展开原文

原文

I'd like to get parts of the filename

filenameblabla_2009-001_name_surname-name_surname

I'd like to get: 2009-001, name_surname, name_surname

I've come up with this, but it's no good

preg_match("/(?:[0-9-]{8})_(?:[a-z_]+)-(?:[a-z_]+)/", $filename, $matches);

Any pointers?

Thanks! BR

doulei6778
doulei6778 您已经回答了自己的问题,但是您要包含“匹配但不捕获”修饰符。将你的正则表达式改为([0-9-]{8})_([a-z_]+)-([a-z_]+),你就会回家。
10 年多之前 回复

4个回答



假设文件名格式没有改变:</ p>

  preg_match('#(\  d {4}  -  \ d {3})_(。*?) - (。*?)$#',$ filename,$ match); 
</ code> </ pre>

更新版本以处理扩展:</ p>

  preg_match('#(\ d {4}  -  \ d {3})_(。*?) - (。*?)  \。(。*?)$#',$ filename,$ match); 
</ code> </ pre>
</ div>

展开原文

原文

Assuming filename format doesn't change:

preg_match('#(\d{4}-\d{3})_(.*?)-(.*?)$#', $filename, $match);

Updated version to handle extension:

preg_match('#(\d{4}-\d{3})_(.*?)-(.*?)\.(.*?)$#', $filename, $match);

dongyaxiao5884
dongyaxiao5884 更新帐户的延期答案
10 年多之前 回复
duanen19871021
duanen19871021 我忘记了扩展。 我试过玩:([a-z _] *?)$#但它不起作用。
10 年多之前 回复



  preg_match(“([0-9  - ] {8})_([^ ] +)([[  ^ ] +) - ([^ _] +)([^ _] +)$“,$ filename,$ matches); 
</ code> </ pre>
</ div>

展开原文

原文

preg_match("([0-9-]{8})_([^_]+)_([^_]+)-([^_]+)_([^_]+)$", $filename, $matches);

duanping5306
duanping5306 代码不起作用,缺少模式分隔符
10 年多之前 回复



如果您的文件名始终是该结构</ p>

  $ name =“blabla_2009-  001_name_surname-name_surname“; 
$ s = explode(”_“,$ name,3);
$ t = explode(” - “,end($ s));
print”$ s [1] $ t [0] $ t [1]
“;
</ code> </ pre>

输出</ p>

  $ php test.php \  n2009-001 name_surname name_surname 
</ code> </ pre>
</ div>

展开原文

原文

if your file name is always that structure

$name = "blabla_2009-001_name_surname-name_surname";
$s = explode("_",$name,3);
$t = explode("-",end($s));
print "$s[1] $t[0] $t[1]
";

output

$ php test.php
2009-001 name_surname name_surname

duanmeng9336
duanmeng9336 看到更新。
10 年多之前 回复
douhui5953
douhui5953 整个爆炸是的,但他只打印返回数组的第2,第3和第4个元素。
10 年多之前 回复
dongsao8279
dongsao8279 那实际上会给我:blabla,2009-001,姓名,姓氏姓氏......
10 年多之前 回复
douxiangdiao6348
douxiangdiao6348 这给出了2009-001,姓名,姓氏
10 年多之前 回复



谢谢大家,</ p>

我更新了自己的解决方案“nikc”指出 ...我只是需要一些方向...... </ p>

这里是代码,如果有人需要类似的解决方案...... </ p>

谢谢大家! </ p>

 <代码>的preg_match('/([0-9  - ] {8})_([^  - ])+  - ([AZ _] +)([AZ  ] +)/',$ filename,$ matches); 
</ code> </ pre>
</ div>

展开原文

原文

Thanks you all,

I've updated my own solution As "nikc" pointed out...i just needed some direction...

here's the code if anyone will need a similar solution...

Thank you all!

preg_match('/([0-9-]{8})_([^-]+)-([a-z_]+).([a-z]+)/', $filename, $matches);

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问