2017-04-22 1 views
0

würde Ich mag jedes Wort dieses Textes erhalten, aber muß Komma als separates Wort zu rücksichtsvoll, in PHP:php separater Text aber rücksichtsvoll Komma als Wort

Mein Eingabetext:

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. 

Mein wollten Array:

array[0] => "Lorem" 
array[1] => "ipsum" 
array[2] => "dolor" 
array[3] => "sit" 
array[4] => "amet" 
array[5] => "," 
array[6] => "consectetuer" 
array[7] => "adipiscing" 
array[8] => "elit" 
array[9] => "." 

Was ich mit explode(" ", $text) bekommen ist:

array[0] => "Lorem" 
array[1] => "ipsum" 
array[2] => "dolor" 
array[3] => "sit" 
array[4] => "amet," 
array[5] => "consectetuer" 
array[6] => "adipiscing" 
array[7] => "elit." 

Können Sie mir helfen? TIA

+0

Verwenden Sie 'preg_match_all ("/\ w + |, | \ ./ ", $ str, $ Übereinstimmungen)' – Mohammad

+0

@Mohammad https://meta.stackexchange.com/questions/230676/hey-you-yeah-you -post-your-antworten-als-antworten-nicht-kommentare Kommentare werden verwendet, um um Klärung oder zusätzliche Details aus dem OP zu bitten. Bitte antworte nicht in den Kommentaren (und lösche bitte deine kommentierte Antwort). – mickmackusa

Antwort

1

Sie könnten das Komma mit einem Leerzeichen + Komma + Raum '' ersetzen -> ''

$newSentence = str_replace("," , " , " , $theSentence); 
$arr = preg_split('/[\s]+/', $newSentence); 
+0

Sie sind sich nicht sicher, was Sie mit den Daten machen, aber Sie müssen Zeilenumbrüche und andere Formatierungen vermeiden, die Ihr Array und die beabsichtigte Verwendung stören könnten. Die erste Methode kann Ihnen ein Array-Element eines Space geben. Verwenden Sie die zweite Methode. – Vbudo

0

Versuchen unten,

preg_match_all('/([\w]+)([\,\.])?/', "Lorem ipsum dolor sit amet, consectetuer adipiscing elit.",$match); 

$arr = array_merge($match[1],array_filter($match[2])); 
print_r($arr); 
0

sollten Sie verwenden preg_match_all() ohne capture Gruppen oder Lookarounds für die beste Effizienz.

Code: (Demo)

$string='Lorem ipsum dolor sit amet, consectetuer adipiscing elit.'; 
var_export(preg_match_all('/[a-z]+|\S/i',$string,$out)?$out[0]:'fail'); 

Ausgang:

array (
    0 => 'Lorem', 
    1 => 'ipsum', 
    2 => 'dolor', 
    3 => 'sit', 
    4 => 'amet', 
    5 => ',', 
    6 => 'consectetuer', 
    7 => 'adipiscing', 
    8 => 'elit', 
    9 => '.', 
) 

\w kann verwendet werden, a-z, A-Z übereinstimmen, 0-9 und _ aber in Ihrer Probe nur aus Buchstaben bestehen.

Wenn Sie Apostrophe einschließen, können Sie $pattern='/[a-z\']+|\S/i' verwenden, aber zukünftige Anpassungen sind Entscheidungen für Sie zu treffen.

Die \S in der zweiten Alternative ist ein beliebiges Leerzeichen, das alle Interpunktionszeichen (eins nach dem anderen) einsammelt, die die erste Alternative durchlässt.

Die i Flagge auf dem Muster diktiert, dass [a-z] wie [A-Za-z] handeln wird.

+0

@locobastos hast du meine effiziente, single-function Lösung gesehen? Dies ist eine professionelle Lösung. – mickmackusa