如何查找所有包含hello
.English
并以 . 结尾的文件名.apk
。
我目前有一个正则表达式,用于查找包含hello
并以.apk
.
preg_match('/.*hello.*\.apk$/i', $filename);
如何查找所有包含hello
.English
并以 . 结尾的文件名.apk
。
我目前有一个正则表达式,用于查找包含hello
并以.apk
.
preg_match('/.*hello.*\.apk$/i', $filename);
你可以用正则表达式来做到这一点,但你最终会得到丑陋/复杂/难以辨认的表达式。而是将更简单的条件与逻辑运算符结合使用:
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()
可以接受一个字符串数组并检查您的字符串是否包含它们全部或至少一个(取决于第二个参数中给出的某种标志)。
如果您在文件名中需要“hello”或“English”,这个正则表达式应该可以解决问题:
/.*(hello|English).*\.apk$/
如果“英语”必须在“你好”之后:
if(preg_match('/.*hello.*English.*\.apk$/i', $filename));
如果它们可以按任何顺序排列:
if(preg_match('/(hello.*English|English.*hello).*\.apk$/i', $filename));