Jump to content

PREG_REPLACE ISSUES! Help!


tapius1

Recommended Posts

I have no idea what the problem is with preg_replace and strings smaller than 3 characters. I'm writing to do a pattern search of abreviations(array) and replacements (array)... tried word boundries, which seems not to work at all. (it is VITAL that im able to match the whole word)

here is a quick example which I cannot understand maybe someone could explain to me:

1. why repitions of certain abrevs do not get replaced.

2. why '/\bs.\b/' wont get matched (where there is a space before  the b. - hense the word boundry)

 

here is a snippet of code could someone please explain why this happens:

 

<?php
  $string='de d. s. pres. div. de de d. s.';

//DEFINE PATTERN
$patterns = array();
$patterns[0] = '/ s. /';
$patterns[1] = '/ b. /';
$patterns[2] = '/ pres./';
$patterns[3] = '/ Ind./';
$patterns[4] = '/ Mar./';
$patterns[5] = '/ Agt./';  
$patterns[6] = '/ Agy./';  
$patterns[7] = '/ Indpls./';                            
$patterns[8] = '/ Chgo./';
$patterns[9] = '/ Corp./';
$patterns[10] = '/ U./';    
$patterns[11] = '/ Fin./';          
$patterns[12] = '/ ls./';   
$patterns[13] = '/ Pres. /';    
$patterns[14] = '/ Internat. /';   
$patterns[15] = '/ m. /';
$patterns[16] = '/ N.Y.C./';   
$patterns[17] = '/ div. /';   
$patterns[18] = '/ de /';  
$patterns[19] = '/ d. /';    


//DEFINE PATTERN REPLACE
$replacements = array();
$replacements[0] = ' son of ';
$replacements[1] = ' born in ';
$replacements[2] = ' president';
$replacements[3] = ' Indiana ';
$replacements[4] = ' March ';
$replacements[5] = ' Agent ';  
$replacements[6] = ' Agency ';  
$replacements[7] = ' Indianapolis ';                            
$replacements[8] = ' Chicago';
$replacements[9] = ' Corporation ';
$replacements[10] = ' U '; 
$replacements[11] = ' Financial ';       
$replacements[12] = ' Island';   
$replacements[13] = ' President '; 
$replacements[14] = ' International ';  
$replacements[15] = ' married to ';
$replacements[16] = ' New York City ';   
$replacements[17] = ' divorced';    
$replacements[18] = ' de '; 
$replacements[19] = ' daughter of ';    

echo '------ Original ---------<br>'.$string.'<br>';
$data = preg_replace($patterns, $replacements, $string);
echo '<br>------ Abbreviation Replace ---------<br>'.$data.'<br>';  
?>

OUTPUT: ------ Original ---------

de d. s. pres. div. de de d. s.

 

------ Abbreviation Replace ---------

de daughter of son of president divorcedde daughter of d. s.

 

any help is appriciated thanks.

Link to comment
https://forums.phpfreaks.com/topic/220522-preg_replace-issues-help/
Share on other sites

. has a special meaning in regular expressions. If you want a literal period then you have to escape it with a backslash.

 

Try with that change.

 

Yeah you're right. This works:

<?php
  $string='de d s pres div de de d s';

//DEFINE PATTERN
$patterns = array();
$patterns[0] = '/ s\. /';
$patterns[1] = '/ b\. /';
$patterns[2] = '/ pres\./';
$patterns[3] = '/ Ind\./';
$patterns[4] = '/ Mar\./';
$patterns[5] = '/ Agt\./';  
$patterns[6] = '/ Agy\./';  
$patterns[7] = '/ Indpls\./';                            
$patterns[8] = '/ Chgo\./';
$patterns[9] = '/ Corp\./';
$patterns[10] = '/ U\./';    
$patterns[11] = '/ Fin\./';          
$patterns[12] = '/ ls\./';   
$patterns[13] = '/ Pres\. /';    
$patterns[14] = '/ Internat\. /';   
$patterns[15] = '/ m\. /';
$patterns[16] = '/ N\.Y\.C\./';   
$patterns[17] = '/ div\. /';   
$patterns[18] = '/ de /';  
$patterns[19] = '/ d\. /';    

  


//DEFINE PATTERN REPLACE
$replacements = array();
$replacements[0] = ' son of ';
$replacements[1] = ' born in ';
$replacements[2] = ' president';
$replacements[3] = ' Indiana ';
$replacements[4] = ' March ';
$replacements[5] = ' Agent ';  
$replacements[6] = ' Agency ';  
$replacements[7] = ' Indianapolis ';                            
$replacements[8] = ' Chicago';
$replacements[9] = ' Corporation ';
$replacements[10] = ' U '; 
$replacements[11] = ' Financial ';       
$replacements[12] = ' Island';   
$replacements[13] = ' President '; 
$replacements[14] = ' International ';  
$replacements[15] = ' married to ';
$replacements[16] = ' New York City ';   
$replacements[17] = ' divorced';    
$replacements[18] = ' de '; 
$replacements[19] = ' daughter of ';    

echo '------ Original ---------<br>'.$string.'<br>';
$data = preg_replace($patterns, $replacements, $string);
echo '<br>------ Abbreviation Replace ---------<br>'.$data.'<br>';  
?>

 

My bad!! Ignore my earlier post.. is this what you are trying to do? RUN my code to see the output..

<?php
  $string=' de s pres div de d an Agt ';

//DEFINE PATTERN
$patterns = array();
$patterns[0] = '/ s /';
$patterns[1] = '/ b /';
$patterns[2] = '/ pres /';
$patterns[3] = '/ Ind /';
$patterns[4] = '/ Mar /';
$patterns[5] = '/ Agt /';  
$patterns[6] = '/ Agy /';  
$patterns[7] = '/ Indpls /';                            
$patterns[8] = '/ Chgo /';
$patterns[9] = '/ Corp /';
$patterns[10] = '/ U /';    
$patterns[11] = '/ Fin /';          
$patterns[12] = '/ ls /';   
$patterns[13] = '/ Pres /';    
$patterns[14] = '/ Internat /';   
$patterns[15] = '/ m /';
$patterns[16] = '/ N Y C /';   
$patterns[17] = '/ div /';   
$patterns[18] = '/ de /';  
$patterns[19] = '/ d /';    

  


//DEFINE PATTERN REPLACE
$replacements = array();
$replacements[0] = ' son of ';
$replacements[1] = ' born in ';
$replacements[2] = ' president ';
$replacements[3] = ' Indiana ';
$replacements[4] = ' March ';
$replacements[5] = ' Agent ';  
$replacements[6] = ' Agency ';  
$replacements[7] = ' Indianapolis ';                            
$replacements[8] = ' Chicago ';
$replacements[9] = ' Corporation ';
$replacements[10] = ' U '; 
$replacements[11] = ' Financial ';       
$replacements[12] = ' Island ';   
$replacements[13] = ' President '; 
$replacements[14] = ' International ';  
$replacements[15] = ' married to ';
$replacements[16] = ' New York City ';   
$replacements[17] = ' divorced ';    
$replacements[18] = ' de '; 
$replacements[19] = ' daughter of ';    

echo '------ Original ---------<br>'.$string.'<br>';
$data = preg_replace($patterns, $replacements, $string);
echo '<br>------ Abbreviation Replace ---------<br>'.$data.'<br>';  
?>

 

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.