2016-07-17 17 views
-1

Ich möchte mit den Worten eines anderen Zeichenfolge eine Zeichenfolge übereinstimmen, die Ordnung zu halten:php, regex preg_match ein bestimmtes Wort 0 oder 1 Mal

$string_original = "Number three is good, then two and one."; 
$match_string = "three two one"; 
$result = magic_function($string_original,$match_string); 

Ich möchte das Ergebnis

$result = array(0 => 'three', 1 => 'two', 2 => 'one'); 
sein

Da alle Wörter in der Übereinstimmungszeichenfolge in der ursprünglichen Reihenfolge gefunden werden. Ein anderes Beispiel:

$string_original = "two is a magic number, one also and three"; 
$match_string = "three two one"; 
$result = magic_function($string_original,$match_string); 
//RESULT WOULD BE 
$result = array(0 => 'three'); 

//LAST EXAMPLE 
$string_original = "three one, then two!"; 
$match_string = "three two one"; 
$result = magic_function($string_original,$match_string); 
//RESULT WOULD BE 
$result = array(0 => 'three', 1 => 'two'); 

Mein magic_function ist so etwas wie

function magic_function($origin,$match){ 
$exploded = explode(' ',$match); 
$pattern = '/'; 
foreach ($exploded as $word){ 
$pattern .= '';//I NEED SOMETHING TO PUT HERE, BUT MY REGEX IS PRETTY BAD AND I DON'T KNOW 
} 
$pattern .= '/'; 
preg_match($pattern,$origin,$matches); 
return $matches; 
} 

Jede mögliche Hilfe bei der Regex Teil? Vielen Dank.

+0

wir antworten nicht gut auf Anfrage, um einfach den Code für Sie zu schreiben. –

+0

@Dagon Ich habe den ganzen Code geschrieben, ich brauche nur Hilfe mit einer Regexp, die ich nicht herausfinden kann. Es ist eine einfache Anfrage, nicht ein ganzes Skript ... –

+0

Nun, es ist einfach dann ... –

Antwort

1

Ich würde vorschlagen, preg_split anstelle von preg_match zu verwenden. Stellen Sie außerdem sicher, dass die Wörter, die Sie suchen, mit preg_quote geschützt werden. Ich empfehle auch, den regulären Ausdrücken Wortgrenzenbedingungen (\b) hinzuzufügen, sodass Sie nur vollständige Wörter finden. Nehmen Sie das heraus, wenn Sie einen Teil der Wörter abgleichen möchten:

function magic_function($string_original,$match_string) { 
    foreach(explode(' ', $match_string) as $word) { 
     $word = preg_quote($word); 
     $split = preg_split("/\b$word\b/", $string_original, 2); 
     if (count($split) < 2) break; 
     $result[] = $word; 
     $string_original = $split[1]; 
    } 
    return $result; 
}