0

如何查找所有包含hello.English并以 . 结尾的文件名.apk

我目前有一个正则表达式,用于查找包含hello并以.apk.

preg_match('/.*hello.*\.apk$/i', $filename);
4

3 回答 3

3

你可以用正则表达式来做到这一点,但你最终会得到丑陋/复杂/难以辨认的表达式。而是将更简单的条件与逻辑运算符结合使用:

if (strpos($filename, 'hello') !== 0 && strpos($filename, 'English') !== 0 && substr($filename, -4) === '.apk') {
    // filename matches
}

PHP 缺乏标准的字符串函数,比如contains()orstarts|endsWith()使得上面的代码有点难看,但是没有什么能阻止你创建一个帮助器、实用程序类:

class StringHelper {
    private $subject;

    public function __construct($subject) {
        $this->subject = $subject;
    }

    public function contains($substring) {
        return strpos($this->subject, $substring) !== false;
    }

    public function endsWith($string) {
        return substr($this->subject, strlen($string) * -1) === $string;
    }
}

然后你if变得更加简单:

$filename = new StringHelper($filename);

if ($filename->contains('hello') && $filename->contains('English') && $filename->endsWith('.apk')) {
    // matches
}

提示:StringHelper您可以使用StringUtilis带有一堆静态方法的“经典”类而不是创建对象,这些静态方法接受$string作为它们的第一个参数。

提示: StringHelper::contains()可以接受一个字符串数组并检查您的字符串是否包含它们全部或至少一个(取决于第二个参数中给出的某种标志)。

于 2013-01-11T16:38:24.223 回答
1

如果您在文件名中需要“he​​llo”或“English”,这个正则表达式应该可以解决问题:

/.*(hello|English).*\.apk$/

于 2013-01-11T16:20:02.560 回答
1

如果“英语”必须在“你好”之后:

if(preg_match('/.*hello.*English.*\.apk$/i', $filename));

如果它们可以按任何顺序排列:

if(preg_match('/(hello.*English|English.*hello).*\.apk$/i', $filename));
于 2013-01-11T16:20:47.290 回答