preg_match('/te**ed/i', 'tested', $matches);
給了我以下錯誤:的preg_match匹配模式
ERROR: nothing to repeat at offset 3
我該怎麼辦,讓圖案實際上包含*
?
preg_match('/te**ed/i', 'tested', $matches);
給了我以下錯誤:的preg_match匹配模式
ERROR: nothing to repeat at offset 3
我該怎麼辦,讓圖案實際上包含*
?
要使用文字星號,您必須用反斜槓將它們轉義。要匹配字面te**ed
你會使用這樣的表達式:
preg_match('/te\*\*ed/i', 'tested', $matches); // no match (te**ed != tested)
但我懷疑這是你想要的。如果你的意思是,比賽任何字符,你需要使用.
:
preg_match('/te..ed/is', 'tested', $matches); // match
如果你真的想任何兩個小寫字母,那麼這個表達式:
preg_match('/te[a-z]{2}ed/i', 'tested', $matches); // match
在任何字符之前加一個反斜線,告訴PHP該字符應該是原樣,而不是一個特殊的正則表達式字符。所以:
preg_match('/te\\**ed/i', 'tested', $matches);
如果你想使用星號樣的搜索,你可以用下面的函數:
function match_string($pattern, $str)
{
$pattern = preg_replace('/([^*])/e', 'preg_quote("$1", "/")', $pattern);
$pattern = str_replace('*', '.*', $pattern);
return (bool) preg_match('/^' . $pattern . '$/i', $str);
}
例子:
match_string("*world*","hello world") // returns true
match_string("world*","hello world") // returns false
match_string("*world","hello world") // returns true
match_string("world*","hello world") // returns false
match_string("*ello*w*","hello world") // returns true
match_string("*w*o*r*l*d*","hello world") // returns true
您是否試圖將「測試」與該正則表達式匹配? – alex
我的意思是使用文字「te ** ed」。所以我假設逃避它是要解決問題:) – sniper