Prüfen ob zwei Keywords in String auftauchen

marvinlol

Erfahrenes Mitglied
Guten Abend allerseits,

meine Herausforderung an folgendem Beispiel:

Ich habe ein Keyword gegeben. In diesem Fall "gaming notebook".

Folgende drei Strings sind beispielsweise gegeben:

Code:
Super Gaming Notebook
Code:
Gaming und Multimedia Notebook
Code:
Notebook für Gaming

Ich möchte nun Abfragen, ob das Keyword bzw. die beiden Keywords "gaming notebook" jeweils in einem gegebenen String vorkommt. Es wird immer nur ein String untersucht. Die drei Beispiele dienen nur zur Veranschaulichung. Im besten Fall soll für alle drei Strings TRUE ausgegeben werden, da eine Vertauschung zählen soll und auch das Vorkommen von z.B. max. 3 anderen Wörtern zwischen den (auch vertauschten) Keywords.

z.B.

Code:
Notebook für extreme Gaming
soll auch wieder TRUE ausgeben, da hier nur zwei Wörter zwischen den Zielwörtern stehen.

Ich stehe da grad auf dem Schlauch. ich würde das mit preg_match angehen, habe aber keine Idee wie.
Vielleicht habt ihr einen Ansatz. Ich freue mich für jeden Input.

Liebe Grüße
Marvin
 
http://regexr.com/3djgv ?

edit/ Ok, das beachtet nicht, dass zwingend beide Vorkommen müssen (man könnte mit preg_match_all aber die matches zählen) und nicht, das max. drei Wörter dazwischen sein dürfen. Müsste man doch ein bisschen mehr Hirnschmalz reinstekcen also in den RegEx :D
 
Zuletzt bearbeitet:
Das Tool visualisiert nur den regulären Ausdruck, in diesem Falle "/(Gaming|Notebook)/g". Das kannst so an zB preg_match_all() übergeben werden.
 
Ich habe jetzt mal ein bisschen weiter gebaut, bekomme aber jetzt immer True, auch wenn nur ein keyword vorkommt.

PHP:
$keyword = strtolower("gaming notebook");
$parts = explode(" ", $keyword);

$string = strtolower("Super Notebook für Gaming zum halben Preis");
//point to end of the array
end($parts);
//fetch key of the last element of the array.
$lastElementKey = key($parts);
//iterate the array
$searchExpression = "";
foreach($parts as $k => $v) {
    if($k != $lastElementKey) {
        $searchExpression .= $v . "|";
    } else {
        $searchExpression .= $v;
    }
}

if(preg_match_all('#\b('. $searchExpression .')\b#', $string, $matches) > 0) {
    echo "vorhanden";
} else {
    echo "nicht vorhanden";
}
 

Neue Beiträge

Zurück