2017-08-12 6 views
-1

je code actuellement qui correspondexpert PHP Regex nécessaire - texte trouver en chaîne mais avec caractère générique

$data=["as much as I like oranges, I like bananas better", 
"there's no rest for the wicked", 
"the further I move from my target, the further I get", 
"just because I like that song, does not mean I will buy it"]; 

if (stripos($data[1], 'just because I') !== false) { 
     $line=str_ireplace('just because I','*'.just because I.'*',$data[1]); 
     break; 
    } 

De cette façon, correspond simplement une phrase qui contient ce texte. Mais ce que je veux faire c'est de faire correspondre avec un joker afin qu'il puisse détecter un motif de phrase. Ainsi, par exemple, il peut détecter:

"just because I... (<<any text in between>>) ...does not mean..." 

Espérons que cela est compréhensible. Il doit également correspondre à l'endroit où le texte apparaît dans la phrase et le marquer en ajoutant * au début et à la fin.

Répondre

1

Vous pouvez utiliser preg_replace au lieu de str_ireplace:

$data = ["as much as I like oranges, I like bananas better", 
     "there's no rest for the wicked", 
     "the further I move from my target, the further I get", 
     "just because I like that song, does not mean I will buy it", 
     "the further I move from my target, the further I get"]; 
$pattern = '/(.*)(just because I .* does not mean)(.*)/i'; 
$replacement = '$1*$2*$3'; 
foreach ($data as $data_) { 
    $line = preg_replace($pattern, $replacement, $data_, -1, $count)."\n"; 
    if ($count > 0) { 
    break; 
    } 
} 
echo $line; 

sera de retour:

*just because I like that song, does not mean* I will buy it 

La variable count contiendra le nombre de remplacements effectués, selon la documentation. Je l'ai ajouté parce qu'il semble que vous voulez sortir de la boucle après le premier remplacement.

+0

Absolument parfait. Merci beaucoup. – Hasen