tapius1 Posted December 3, 2010 Share Posted December 3, 2010 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. Quote Link to comment https://forums.phpfreaks.com/topic/220522-preg_replace-issues-help/ Share on other sites More sharing options...
requinix Posted December 3, 2010 Share Posted December 3, 2010 . 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. Quote Link to comment https://forums.phpfreaks.com/topic/220522-preg_replace-issues-help/#findComment-1142453 Share on other sites More sharing options...
OldWest Posted December 3, 2010 Share Posted December 3, 2010 Quote . 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>'; ?> Quote Link to comment https://forums.phpfreaks.com/topic/220522-preg_replace-issues-help/#findComment-1142518 Share on other sites More sharing options...
OldWest Posted December 3, 2010 Share Posted December 3, 2010 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>'; ?> Quote Link to comment https://forums.phpfreaks.com/topic/220522-preg_replace-issues-help/#findComment-1142523 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.