2015-08-11 14 views
8

Obecnie mam coś tablicy jak tencyfry Dzielenie i łacińskie litery z napisu

[0] => IS-001 開花した才能「篠ノ之 箒」 

od tego, chciałbym, aby wyodrębnić tylko IS-001 części i pozostawić japoński znak z tyłu, by coś takiego

[0] => 開花した才能「篠ノ之 箒」 

Normal preg_split Używam obecnie tylko dla białej przestrzeni, ale wydaje się, jakby jakiś problem na 」charakteru 箒 wpaść następnej tablicy. Więc zdecydowałem, czy mogę tylko podzielić te nie-japońskie znaki?

Odpowiedz

7

Spróbuj

echo preg_replace('/^[a-zA-Z0-9\-_]+/u','','IS-001 開花した才能「篠ノ之 箒」'); 
  • ^ pozycję wymuszenia na początku łańcucha
  • [a-zA-Z0-9\-_] mecz pojedynczy znak występuje na liście
  • + pomiędzy jednym i nieograniczone razy, tyle razy, ile to możliwe, dając z powrotem w razie potrzeby
  • u modifier Unicode: ciągi wzoru są traktowane jako UTF-16.
+0

tak to działa poprawnie. Dzięki. Możliwe, jeśli możesz mi powiedzieć, co to jest za regex? – user1897151

+0

@ user1897151 czy masz wartości również po tych japońskich słowach? Jeśli tak, możesz po prostu usunąć "^" ze wzoru –

0

Jeśli łańcuch jest taka sama we wszystkich przypadkach można skorzystać z parametru eksplodować granica:

$string = 'IS-001 開花した才能「篠ノ之 箒」'; 
$array = explode(' ', $string, 2); 

echo $array[1]; 
+0

nie działa, nic się nie stało. – user1897151

+0

Limit Oups powinien wynosić 2, a nie 1 przepraszam! –

4

Rozwiązaniem tego problemu jest użycie multibyte string functions.

Tak więc $char = substr($str, $i, 1); stanie się $char = mb_substr($str, $i, 1, 'UTF-8');, a strlen($str) stanie się mb_strlen($str, 'UTF-8').

$str="IS-001 開花した才能「篠ノ之 箒」"; 
$japanese = preg_replace(array('/[^\p{Han}?]/u', '/(\s)+/'), array('', '$1'), $str); 

echo $japanese; 

(lub)

Usuń łacińskie litery i cyfry z ciągu

$res = preg_replace('/[a-zA-Z0-9-]+/', '', $str); 
echo $res; 
+0

wydaje się nie działać, ponieważ zastąpi cały mój język japoński na pełne kanji. Mam w sobie słowa hiragany i katakany. Czy w takim przypadku można usunąć tylko alfabet, liczbę i znak specjalny? – user1897151

+0

@ user1897151 Poprawnym terminem jest: «list łaciński». Alfabet to zbiór znaków, a nie same znaki. – nalply

+0

Mam aktualizację moja odpowiedź sprawdź to i daj mi znać –

Powiązane problemy