PHP搜索文本文件中的任何WAV文件名

时间:2019-05-08 12:51:59

标签: php regex search

我有一系列包含原始文本或json数据的文件,在这些文件中将是wav文件名。所有的wav文件都有后缀.wav

反正使用php是否可以搜索单个文本或json文件并返回找到的所有.wav文件的数组?

此随机文本示例包含6个.wav文件,我该如何搜索并提取文件名?

Spoke as as other again ye. Hard on to roof he drew. So sell side newfile.wav ye in mr evil. Longer waited mr of nature seemed. Improving knowledge incommode objection me ye is prevailed playme.wav principle in. Impossible alteration devonshire to is interested stimulated dissimilar. To matter esteem polite do if. 

Spot of come to ever test.wav hand as lady meet on. Delicate contempt received two yet advanced. Gentleman as belonging he commanded believing dejection in by. On no am winding chicken so behaved. Its preserved sex enjoyment new way behaviour. Him yet devonshire celebrated welcome.wav especially. Unfeeling one provision are smallness resembled repulsive. 

Raising say express had chiefly detract demands she. Quiet led own cause three him. Front no party young abode state up. Saved he do fruit woody of to. Met defective are allowance two perceived listening consulted contained. It chicken oh colonel pressed excited suppose to shortly. He improve started no we manners another.wav however effects. Prospect humoured mistress to by proposal marianne attended. Simplicity the far admiration preference everything. Up help home head spot an he room in. 

Talent she for lively eat led sister. Entrance strongly packages she out rendered get quitting denoting led. Dwelling confined improved it he no doubtful raptures. Several carried through an of up attempt gravity. Situation to be at offending elsewhere distrusts if. Particular use for considered projection cultivated. Worth of do doubt shall it their. Extensive existence up me last.wav contained he pronounce do. Excellence inquietude assistance precaution any impression man sufficient. 

我已经尝试过了,但是没有结果。

$lines = file('test.txt');

foreach ($lines as $line_num => $line) {

    $line = trim($line);

    if (strpos($line, '*.wav') !== false) {
        echo ($line);
    }

}

以上文字应返回:

newfile.wav
playme.wav
test.wav
welcome.wav
another.wav
last.wav

谢谢

更新:

使用以下内容:

$text = file_get_contents('test.txt');
preg_match_all('/\w+\.wav/', $text, $matches);
var_dump($matches);

结果为:

    array(1) {
      [0]=>
      array(6) {
        [0]=>
        string(11) "newfile.wav"
        [1]=>
        string(10) "playme.wav"
        [2]=>
        string(8) "test.wav"
        [3]=>
        string(11) "welcome.wav"
        [4]=>
        string(11) "another.wav"
        [5]=>
        string(8) "last.wav"
      }
}

因此,wav文件的数组包含在数组中,我如何只获取wav文件的数组?谢谢

这不适用于名称中带有空格的wav文件。 有什么想法吗?

3 个答案:

答案 0 :(得分:2)

This tool可能会帮助您设计所需的表达式并对其进行测试,也许类似于:

([a-z]+\.wav)

如果需要,还可以为其添加更多边界。

enter image [![description在这里] 2] 2

此图显示了表达式的工作方式,您可以在此link中可视化其他表达式:

PHP代码

您也可以使用preg_match_all来这样做,也许类似于:

$re = '/([a-z]+\.wav)/m';
$str = 'Spoke as as other again ye. Hard on to roof he drew. So sell side newfile.wav ye in mr evil. Longer waited mr of nature seemed. Improving knowledge incommode objection me ye is prevailed playme.wav principle in. Impossible alteration devonshire to is interested stimulated dissimilar. To matter esteem polite do if.

    Spot of come to ever test.wav hand as lady meet on. Delicate contempt received two yet advanced. Gentleman as belonging he commanded believing dejection in by. On no am winding chicken so behaved. Its preserved sex enjoyment new way behaviour. Him yet devonshire celebrated welcome.wav especially. Unfeeling one provision are smallness resembled repulsive.

    Raising say express had chiefly detract demands she. Quiet led own cause three him. Front no party young abode state up. Saved he do fruit woody of to. Met defective are allowance two perceived listening consulted contained. It chicken oh colonel pressed excited suppose to shortly. He improve started no we manners another.wav however effects. Prospect humoured mistress to by proposal marianne attended. Simplicity the far admiration preference everything. Up help home head spot an he room in.

    Talent she for lively eat led sister. Entrance strongly packages she out rendered get quitting denoting led. Dwelling confined improved it he no doubtful raptures. Several carried through an of up attempt gravity. Situation to be at offending elsewhere distrusts if. Particular use for considered projection cultivated. Worth of do doubt shall it their. Extensive existence up me last.wav contained he pronounce do. Excellence inquietude assistance precaution any impression man sufficient. ';

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

// Print the entire match result
var_dump($matches);

RegEx的测试脚本

const regex = /([a-z]+\.wav)/gm;
const str = `Spoke as as other again ye. Hard on to roof he drew. So sell side newfile.wav ye in mr evil. Longer waited mr of nature seemed. Improving knowledge incommode objection me ye is prevailed playme.wav principle in. Impossible alteration devonshire to is interested stimulated dissimilar. To matter esteem polite do if.
    
    Spot of come to ever test.wav hand as lady meet on. Delicate contempt received two yet advanced. Gentleman as belonging he commanded believing dejection in by. On no am winding chicken so behaved. Its preserved sex enjoyment new way behaviour. Him yet devonshire celebrated welcome.wav especially. Unfeeling one provision are smallness resembled repulsive.
    
    Raising say express had chiefly detract demands she. Quiet led own cause three him. Front no party young abode state up. Saved he do fruit woody of to. Met defective are allowance two perceived listening consulted contained. It chicken oh colonel pressed excited suppose to shortly. He improve started no we manners another.wav however effects. Prospect humoured mistress to by proposal marianne attended. Simplicity the far admiration preference everything. Up help home head spot an he room in.
    
    Talent she for lively eat led sister. Entrance strongly packages she out rendered get quitting denoting led. Dwelling confined improved it he no doubtful raptures. Several carried through an of up attempt gravity. Situation to be at offending elsewhere distrusts if. Particular use for considered projection cultivated. Worth of do doubt shall it their. Extensive existence up me last.wav contained he pronounce do. Excellence inquietude assistance precaution any impression man sufficient. `;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}

答案 1 :(得分:1)

这就是发明regular expressions的原因。

$text = file_get_contents('test.txt');
preg_match_all('/(\w+\.wav)/', $text, $matches);
var_dump($matches[0]);

一些好的资源:

输出:

    array(6) {
      [0] => string(11) "newfile.wav"
      [1] => string(10) "playme.wav"
      [2] => string(8) "test.wav"
      [3] => string(11) "welcome.wav"
      [4] => string(11) "another.wav"
      [5] => string(8) "last.wav"
    }

答案 2 :(得分:0)

您快到了。您可以按空格爆炸$line。现在,您遍历每个单词并检查是否以.wav扩展名结尾。如果是,则打印单词。

<?php

foreach ($lines as $line_num => $line) {
    $line = trim($line);
    $words = explode(" ",$line);
    foreach($words as $each_word){
        $wav_index = strpos($each_word, '.wav');
        if ($wav_index !== false && $wav_index === strlen($each_word) - 4) { // strict check to make sure string ends with a .wav and not being elsewhere
            echo $each_word,PHP_EOL;
        }
    }    
}