如何从多个文件名中获取括号之间的字符串?

时间:2016-01-19 22:52:29

标签: php

假设我在一个文件夹中有5个文件。文件名如下所示

  • sdfsf(email_a@domain.com) - 2015-12-05 0508.eml
  • sdfsdf sd Glitch'(email_b@domain.com) - 2015-12-30 0602.eml
  • 不那么容易(email_c@domain.com) - 2015-12-31 1719.eml
  • habi jabi(email_d@domain.com) - 2016-01-06 0513.eml
  • 你应该(email_e@domain.com) - 2015-12-27 1227.eml

现在我想从文件名中获取“()”括号之间的字符串,并希望将它们保存在文本文件中。

因此输出将保存在文本文件中,如下所示

email_a@domain.com
email_b@domain.com
email_c@domain.com
email_d@domain.com
email_e@domain.com

我试过这段代码

<?php
    foreach (glob("./ABC/*.txt") as $filename) {
    echo "$filename size " . filesize($filename) . "\n";
    }
?>

2 个答案:

答案 0 :(得分:1)

正如安德鲁所说,最好用正则表达式完成。

   $files = scandir('folder/');
   foreach($files as $file) {
     preg_match("/(?:\\((.*)\\))/", $file, $matches); # Or "/\((.*)\)/" by Andrew
     var_dump($matches);
   }

答案 1 :(得分:0)

您可以使用preg_match通过正则表达式解决此问题。所以在这种情况下使用以下代码:

preg_match('/\(.*\)/', $filename, $matches);
$new_file_name = substr($matches[0],1,strlen($matches[0])-2); //skip the openning and closing parenthesis

现在$ new_file_name将只包含括号之间的数据。

希望有所帮助