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()、またはstarts|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()文字列の配列を受け入れて、文字列にすべてまたは少なくとも1つが含まれているかどうかを確認できます(2番目の引数で指定されたフラグの種類によって異なります)。

于 2013-01-11T16:38:24.223 に答える
1

ファイル名に「hello」または「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 に答える