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
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>';  
?>

 

Link to comment
Share on other sites

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>';  
?>

 

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • 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.