Nach dieser Frage: Pattern for check single occurrency into preg_match_allWas ist effizienter zwischen str_pos und preg_match?
Ich verstehe, dass mein Muster nur ein Wort pro Zyklus enthalten muss, weil in dem Fall, in dieser Frage berichtete, I „Microsoft“ und „Microsoft Exchange“ finden muß, und ich kann nicht ändere meine Regexp, weil diese beiden Möglichkeiten dynamisch aus einer Datenbank stammen!
Also meine Frage ist: Welches ist die bessere Lösung zwischen über 200 preg_match und die gleiche Anzahl von str_pos zu überprüfen, ob eine Teilmenge von char diese Wörter enthält?
Ich versuche, den möglichen Code für beide Lösung zu schreiben:
$array= array(200+ values);
foreach ($array as $word)
{
$pattern='<\b(?:'.$word.')\b>i';
preg_match_all($pattern, $text, $matches);
$fields['skill'][] = $matches[0][0];
}
die Alternative ist:
$array= array(200+ values);
foreach ($array as $word)
{
if(str_pos($word, $text)>-1)
{
fields['skill'][] = $word;
}
}
REGEX-basierte Funktionen sind langsamer als die meisten anderen String-Funktionen. Übrigens kann Ihr Test es auch mit einem Regex machen, wenn Sie es wie folgt machen: $ pattern = '<\ b (?:'. $ Word1. '|'. $ Word2. '|'. $ Word3. '|' . $ word4. ') \ b> i'; 'und wie viele Wörter Sie gleichzeitig verwenden können, hängt davon ab, wie lang die Regex sein kann. Ich habe bei Test Regex erstellt, die 12004 Zeichen lang war. Scheint nicht die max. – JustOnUnderMillions
'str_pos()' ist in der Regel 3-20x schneller als preg_match, weil preg_match hauptsächlich verwendet wird, um das Format einer Zeichenkette zu untersuchen und Teile davon basierend auf regulären Ausdrücken abzurufen. –