$pattern = "/^[a-zA-Z0-9]{1,30}$/";
$string = preg_replace("Description", "", $description);
if(preg_match($pattern, $string)){
//do some stuff
}
如何在字符串中找到「說明」時調整正則表達式失敗。PHP正則表達式:組合preg_match和preg_replace
$pattern = "/^[a-zA-Z0-9]{1,30}$/";
$string = preg_replace("Description", "", $description);
if(preg_match($pattern, $string)){
//do some stuff
}
如何在字符串中找到「說明」時調整正則表達式失敗。PHP正則表達式:組合preg_match和preg_replace
你使用了一種叫做負向預測 - 一種零寬度斷言。這意味着它會檢查字符串中的某些內容,而不會真正「吃」它中的任何一個,因此斷言之後的事物開始於斷言開始的位置。負向超前意味着如果找到字符串,則正則表達式無法匹配。你可以用(?!...)
來做到這一點,其中「...」是你想要避免的佔位符。所以你的情況,要避免描述:
$pattern = "/^(?!.*Description)[a-zA-Z0-9]{1,30}$/";
在(?!.*Description)
,該.*
一開始是有確保說明不會在任何地方都出現在字符串中(即任何說明並且它仍然會失敗,如果說明是在那裏的某個地方)。請記住,這是零寬度,所以在沒有描述之後,它會再次回到原來的位置,在這種情況下是字符串的最開始。
不要爲此使用正則表達式。
if(strpos($string,"Description") === false) {
// "Description" is NOT in the string
}
您可以使用strpos
if (false === strpos($string, "Description"))
{
// Description not found
}
我明白了 「?!」,但我不明白爲什麼。 「*」 是必要的。除此之外,它效果很好。 – Peter
@Peter,這是必須的,因爲'^'意思是「在strnig的開始處錨定」,所以如果你只是做了'(?!Description)',它將只會失敗,如果字符串*開始*帶有Description。 –
好吧,我現在明白了。謝謝你的解釋 – Peter