Замяна само на точния низ

cHuBakA

Registered
Здравейте. При str_replace с асоциативен масив


PHP:
$replacements = array(
    '11' => 'аа',
    '22' => 'bb',
);

как може да се направи замяната да бъде само на точния низ?

Ето по-точно какво имам предвид. Сега когато има 11 го заменя с "aa", но когато е между числа 01123 заменя единиците вътре и става 0аа23 .

Как може да се направи 11 да го заменя само когато е самостоятелно число, а когато е между други числа да го оставя както е и да не го заменя?
 
Заповядай

PHP:
$string = 'This will be replaced 11 22, and this is not 111 222 01123 02234';
$patterns = array();
$patterns[0] = '/(\b11\b)/i';
$patterns[1] = '/(\b22\b)/i';
$replacements = array();
$replacements[0] = 'aa';
$replacements[1] = 'bb';
echo preg_replace($patterns, $replacements, $string);
 
Благодаря много! Точно това имах предвид :)

Допълнителен въпрос , този начин подходящ ли е голям обем низове?
 
Би трябвало, аз поне не знам по-добър начин да се направи замяна на точен низ.
 
Моля за малко допълнение. Има ли начин да се добави към същия код проверка за 11 и 22 и ако е друго число да изписва съобщение. Примерно "грешка'?
 
В смисъл искаш да вади грешка ако няма съвпадение с шаблоните, или ще имаш повече от два шаблона и искаш да провериш дали точно някой от тези двата е излязъл?
 
Само ако няма съвпадение с шаблоните...?

п.п.В смисъл, ако не е 11 или 22 да показва грешка
 
Примерно така.

PHP:
$string = 'This will be replace 11 22, and this is not 111 222 01123 02234';
$patterns = array();
$patterns[0] = '/(\b11\b)/i';
$patterns[1] = '/(\b22\b)/i';
$replacements = array();
$replacements[0] = 'aa';
$replacements[1] = 'bb';
$subject = preg_replace($patterns, $replacements, $string);
$match_1 = '/(\baa\b)/i';
$match_2 = '/(\bbb\b)/i';
$res_1 = preg_match($match_1, $subject);
$res_2 = preg_match($match_2, $subject);
if($res_1 == 0 || $res_2 == 0) {
    echo 'error';
}
 
Благодаря много!

п.п В случая постоянно ми дава error, но виждам каква е идеята и ще се опитам да си го оправя. Благодаря още веднъж teroristd!!!
 

Горе