Spróbuj tego kodu (online version @ Ideone.com):
<?php
$data1='疯狂的管道Test';
$data2='睡眠帮手-背景乐Test';
echo preg_replace("/[\x{4e00}-\x{9fa5}]+/u", '', $data1), "\n";
echo preg_replace("/[\x{4e00}-\x{9fa5}]+/u", '', $data2);
// Better use this (credits to Kobi's answer below)
preg_replace("/\p{Han}+/u", '', $data)
mam usunięte ^
z wyrażenia regularnego więc nie musimy str_replace() już.
Twoje stare wyrażenie regularne pasowało do wszystkich znaków innych niż chińskie, dzięki czemu preg_replace()
pozostało tylko chińskie znaki w zwracanym łańcuchu. Aby uzyskać końcowy wynik, musisz zastąpić znalezione chińskie znaki pustym ciągiem.
preg_replace("/[^\x{4e00}-\x{9fa5}]+/u", '', $data1) // returns 疯狂的管道
str_replace('疯狂的管道', '', $data1); // gives us Test
Drugie wyrażenie regularne ponownie pasuje do wszystkich znaków innych niż chińskie. Ale teraz są one nie w sekwencji!
preg_replace("/[^\x{4e00}-\x{9fa5}]+/u", '', $data2) // returns 睡眠帮手背景乐
I ten ciąg nie można znaleźć w $data2
już zatem nie działa.
Wyrażenie regularne nie jest rzeczywisty problem. Problem polega na tym, że dopasowanie drugiego regexp nie reprezentuje sekwencji w oryginalnym łańcuchu, który można zastąpić. – ComFreek
Przez "nie" pasuje - masz na myśli "-" w drugim var? – ToastedCrack
Nie bardzo rozumiem twoje pytanie. Jeśli ** wszystkie ** chińskie znaki w drugim wyrażeniu byłyby następujące po sobie, to by działało. – ComFreek