2012-04-06 12 views
1

Ich muss die Wörter und Sätze in einem Text extrahieren. Zum Beispiel ist der Text:Wie extrahiert man Wörter und Phrasen mit preg_split() in PHP?

Hallo Welt "Japan und China", Amerikaner, Asiaten, "Juden und Christen", und halb-Katholiken, Zeugen Jehovas

Mit preg_split() zurückgegeben werden sollen den folgende:

  1. Hallo
  2. Welt
  3. Japan und China
  4. Amerikaner
  5. Asian s
  6. Juden und Christen
  7. und
  8. halb Katholiken
  9. Jehovas
  10. Zeugen

Ich brauche die RegEx für das wissen zu arbeiten (oder ist es möglich?). Beachten Sie die Regeln, Phrasen sind in Anführungszeichen eingeschlossen ("). Alphanumerische Zeichen, einfache Anführungszeichen (') und Bindestriche (-) werden als Teil des Wortes betrachtet (deshalb werden" Jehovas "und" Semikatholiken "als ein Wort betrachtet), die Mit Leerzeichen getrennte Leerzeichen werden als einzelne Wörter betrachtet, während andere Symbole, die nicht erwähnt werden, ignoriert werden

+0

Sie '\ S verwenden +', um Striche und Zitate in Betracht gezogen werden. – hjpotter92

Antwort

1
.

Sie können es tatsächlich tun sehr einfach mit str_getcsv wie folgt aus:

// replace any comma or space by a singe space 
$str = preg_replace('/(,+[ ]+)|([ ]+)/', ' ', $str); 
// treat the input as CSV, the delimiters being spaces and enclusures double quotes 
print_r(str_getcsv($str, ' ', '"')); 

Ausgang:

Array 
(
    [0] => Hello 
    [1] => World 
    [2] => Japan and China 
    [3] => Americans 
    [4] => Asians 
    [5] => Jews and Christians 
    [6] => and 
    [7] => semi-catholics 
    [8] => Jehovah's 
    [9] => witnesses 
) 
+0

danke .. scheint wie eine gute Lösung –

+0

Aber wahrscheinlich Inhalt von Phrasen sollte unverändert bleiben und das ändert sie auch. Zum Beispiel, wenn Sie die Phrase "Juden, Moslems und Christen" hätten, würde es in "Juden Muslime und Christen" umgewandelt werden. – Pere

0

Wenn Ihre Beispielzeichenfolge typisch ist, beginnen Sie mit den einfachen und doppelten Anführungszeichen.Ich habe hier heredoc syntax verwendet, um die Zeichenfolge sicher zu machen arbeiten mit

$string = <<<TEST 
Hello World, "Japan and China", Americans, Asians, "Jews and Christians", and semi-catholics, Jehovah's witnesses 
TEST; 
$safe_string = addslashes($string);//make the string safe to work with 
$pieces = explode(",",$safe_string);//break into pieces on comma 
$words_and_phrases = array();//initiate new array 

foreach($pieces as $piece)://begin working with the pieces 
    $piece = trim($piece);//a little clean up 
    if(strpos($piece,'"'))://this is a phrase 
     $words_and_phrases[] = str_replace('"','',stripslashes($piece)); 
    else://else, these are words 
     $words = explode(" ",stripslashes($piece)); 
     $words_and_phrases = array_merge($words_and_phrases, $words); 
    endif; 
endforeach; 
print_r($words_and_phrases); 

. Hinweis: Sie auch preg_replace verwenden könnte, aber es scheint, wie viel des Guten für so etwas wie dieses

Verwandte Themen