2010-08-30 7 views
0

Cette question est presque identique à: Php search string (with wildcards), mais sera arrangé un peu différemment. J'ai eu du mal à comprendre les solutions proposées pour en tirer le meilleur parti. Peut-être que vous pouvez aider les gars?fonction de recherche php en utilisant des caractères génériques

J'ai une chaîne de début et une chaîne de fin que j'utilise pour prendre en sandwich les chaînes d'intérêt.

C'est la fonction que je suis actuellement en utilisant pour cela:

function get_string_between($string, $start, $end) 
{ 
    $string = " ".$string; 
    $ini = strpos($string,$start); 
    if ($ini == 0) return ""; 
    $ini += strlen($start); 
    $len = strpos($string,$end,$ini) - $ini; 
    return substr($string,$ini,$len); 
} 

Parfois mes chaînes commençant doivent avoir des jokers en eux pour représenter une partie dynamique d'un modèle

par exemple je voudrais besoin de ceci pour mon début variable code:

$begin_code = "id='%wildcard%' class='sailors_assistant_%wildcard%'>"; 

et modifier ma fonction d'origine ci-dessus pour détecter%% des caractères génériques (s) et compte pour eux lors de l'utilisation de leur san dwich recherche-n-grabs.

Un conseil?

Répondre

2

La meilleure façon serait d'utiliser une expression régulière:

function get_string_between($string, $start, $end) { 
    $start = str_replace("%wildcard%", ".*?", preg_quote($start, "/"); 
    $end = str_replace("%wildcard%", ".*?", preg_quote($end, "/"); 
    $regex = "/$start(.*?)$end/"; 
    if (preg_match($regex, $string, $matches)) 
     return $matches[1]; 
    else 
     return false; 
} 
+0

Merci pour cette grande aide. Je vais courir ce moment et revenir et signaler comment cela se passe dès que possible. – atwellpub

+0

Bonjour --- J'ai couru et joué avec la fonction et j'ai rencontré un problème. Le problème est que lors de l'exécution de ce regex /$start(.*)$end/ sur une grande zone de texte qui a plus d'une occurrence de $ end, il utilisera la dernière occurrence plutôt que la plus récente trouvée après $ start. Y a-t-il un moyen de contourner ceci? – atwellpub

+0

@atwell, j'ai édité la réponse pour adresser ce problème. Vous devez rendre le quantificateur non gourmand. – Artefacto

Questions connexes