2010-03-03 8 views
1

les gars, j'ai des tableaux dans lesquels je dois correspondre à ce genre de texte puis supprimer les espaces en entre les mots,PHP regex aide - Rechercher un match dans une autre et à remplacer quelque chose

Name:'lofse erbbnwq qweqw-qweqw' KKK 
Name:'lofsdsse erbsdsdbnwq sds sdsd sdqwsdseqw-qwsdseqw' KKK 
Name:'lofsse esdsdbnwq sds sds sddseqw-qwseqw' KKK 



i read somewhere that it will work like this, but i tried and its not working :(

$data = preg_replace_callback('%Name:\'(.*)\' kkk%',replace_within_tag, $data); 
function replace_within_tag($groups) {return preg_replace('/\s/', '.', $groups[0]);} 

sortie doit être comme ce

Name:'lofse.erbbnwq.qweqw-qweqw' KKK 
Name:'lofsdsse.erbsdsdbnwq.sds.sdsd.sdqwsdseqw-qwsdseqw' KKK 
Name:'lofsse.esdsdbnwq.sds.sds.sddseqw-qwseqw' KKK 

s'il vous plaît j'ai besoin d'une aide rapide sur ce point, me dire le chemin de travail

Répondre

0

groupe le match puis utilisez $matches[1] dans le rappel pour ne remplacer les espaces en t La partie du texte entre les citations. Vous avez plusieurs façons de le faire. Par exemple:

$output = preg_replace_callback("!(Name:')(.*?)(' KKK)!", 'replace_spaces', $input); 

function replace_spaces($matches) { 
    return $matches[1] . preg_replace('!\s+!', '.', $matches[2]) . $matches[3]; 
} 

Vous devez effectuer cette opération car vous capturez les chaînes principales et secondaires. Une autre façon est de capturer moins. Par exemple:

$output = preg_replace_callback("!(?<=').*?(?=')!", 'replace_spaces', $input); 

function replace_spaces($matches) { 
    return preg_replace('!\s+!', '.', $matches[0]); 
} 

Ceci utilise lookaheads and lookbehinds.

+0

travaillé, merci: D – Jake

+0

sortie est comme lofse.erbbnwq.qweqw-qweqw, supprime le nom et KKK, mais son travail pour moi: D u – Jake

1
$array=array("Name:'lofse erbbnwq qweqw-qweqw' KKK", "Name:'lofsdsse erbsdsdbnwq sds sdsd sdqwsdseqw-qwsdseqw' KKK","Name:'lofsse esdsdbnwq sds sds sddseqw-qwseqw' KKK"); 
foreach ($array as $k=>$v){ 
    if (strpos($v,"Name:") !==FALSE) { 
     $s = explode("'",$v); 
     $s[1]=preg_replace("/\s+/",".",$s[1]); 
     $array[$k]=implode("'",$s); 
    } 
} 
print_r($array); 

sortie

$ php test.php 
Array 
(
    [0] => Name:'lofse.erbbnwq.qweqw-qweqw' KKK 
    [1] => Name:'lofsdsse.erbsdsdbnwq.sds.sdsd.sdqwsdseqw-qwsdseqw' KKK 
    [2] => Name:'lofsse.esdsdbnwq.sds.sds.sddseqw-qwseqw' KKK 
) 
+0

DonT pense son une peu long chemin à faire cette tâche? – Jake

+1

non, ça me va bien. – ghostdog74

Questions connexes