如何找到包含hello
,English
並以.apk
結尾的所有文件名。正則表達式以匹配PHP中的兩個不同字符串
我目前有一個正則表達式,我用它來查找包含hello
並以.apk
結尾的文件名。
preg_match('/.*hello.*\.apk$/i', $filename);
如何找到包含hello
,English
並以.apk
結尾的所有文件名。正則表達式以匹配PHP中的兩個不同字符串
我目前有一個正則表達式,我用它來查找包含hello
並以.apk
結尾的文件名。
preg_match('/.*hello.*\.apk$/i', $filename);
你可以用正則表達式來做到這一點,但最終會出現醜陋/複雜/難以辨認的表情。而是使用的simplier條件結合邏輯運算符togheter加入:
if (strpos($filename, 'hello') !== 0 && strpos($filename, 'English') !== 0 && substr($filename, -4) === '.apk') {
// filename matches
}
PHP的缺乏標準的字符串函數像或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()
可以接受字符串數組,並檢查字符串是否包含他們全部或其中至少一個(取決於某種在第二個參數給出一個標誌)。
此正則表達式應該做的伎倆,如果你在文件名需要「你好」或「英語」:
/.*(hello|English).*\.apk$/
如果「英文」必須出現在「你好」:
if(preg_match('/.*hello.*English.*\.apk$/i', $filename));
如果他們可以在任何順序:
if(preg_match('/(hello.*English|English.*hello).*\.apk$/i', $filename));
是否有一個版本說明 - 必須匹配hello和英語(以任何順序)並以.apk結尾? –
'/(hello.*English|English.*hello)。* \。apk $/i''應該可以工作,即使可能有更優雅的方式。 – glomad
@ithcy,修復您對未來觀衆的回答。 –
我喜歡這個:-) –
+1這可以幫助你現在和幫助未來的問題。 – Josh
如果不在對象上下文中,這會給出使用$ this的錯誤? –