2015-08-11 22 views
8

Attualmente ho un qualcosa di serie del generecifre scissione e lettere latine da una stringa

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

Da questo, vorrei estrarre solo la parte IS-001 e lasciare il carattere giapponese dietro a qualcosa di simile

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

normale preg_split sto usando attualmente solo per lo spazio bianco, ma sembra avere qualche problema sul carattere 箒 」per cadere in prossima serie. Quindi ho deciso se solo io potessi dividere quei personaggi non giapponesi?

risposta

7

Prova questa posizione assert

echo preg_replace('/^[a-zA-Z0-9\-_]+/u','','IS-001 開花した才能「篠ノ之 箒」'); 
  • ^ all'inizio della stringa
  • 012.
  • [a-zA-Z0-9\-_] partita un singolo carattere presente nella lista
  • + Tra uno e numero illimitato di volte, come più volte possibile, restituendo come necessario
  • u modifier unicode: Le stringhe di ricerca sono trattati come UTF-16.
+0

sì, questo funziona bene. Grazie. Possibile se puoi dirmi per cosa è quella regex? – user1897151

+0

@ user1897151 hai dei valori anche dopo quelle parole giapponesi? Se sì, puoi semplicemente rimuovere quel '^' dal modello –

0

Se la stringa è la stessa in tutti i casi, è possibile utilizzare esplodere con il parametro limite:

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

echo $array[1]; 
+0

non funziona, non è successo niente. – user1897151

+0

Il limite di Oups deve essere impostato su 2, non 1 scusa! –

4

Una soluzione a questo è quello di utilizzare multibyte string functions.

Quindi $char = substr($str, $i, 1); diventerà $char = mb_substr($str, $i, 1, 'UTF-8'); e strlen($str) diventerà mb_strlen($str, 'UTF-8').

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

echo $japanese; 

(o)

Rimuovere le lettere latine e cifre da stringa

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

sembra non funzionare in quanto sostituirà la mia intera lingua giapponese con kanji completo. Ho parole hiragana e katakana. È possibile rimuovere solo alphaberts, numero e - carattere speciale in questo caso? – user1897151

+0

@ user1897151 Il termine corretto è: «lettera latina». Un alfabeto è una raccolta di personaggi, non i personaggi stessi. – nalply

+0

Ho aggiornato la mia risposta controllarlo e fammi sapere –

Problemi correlati