Page 1 of 1

preg_replace() help: trim right space before append value

Posted: Tue Jun 30, 2009 11:12 am
by jeff00seattle
Hi

I having beating my head over the following, I want replacement to trim all right spaces from match before replace and then append a value with a single space, using preg_replace().

For example, I have a text that is filled with dates with Month/Day and Month/Day/Year. I want to replace all Month/Day(s) and append with Year. To elaborate:
Match 6/13 => Replace 6/13/2009
6/13/2009 => Do nothing

So far, the following Match regex works: '[0-9]{1,2}\/[0-9]{1,2}\s{1,}'

4/28 hfdkkdi sielsl fidijg. 5/14 fiisollei sikedi jdsildh 6/3 diel dkisl hgiels dhpwld, 6/13/2009 yeus spwiv wojje rtyu

But this replace '\0/2009 ' does the following:

4/28 /2009 hfdkkdi sielsl fidijg. 5/14 /2009 fiisollei sikedi jdsildh 6/3 /2009 diel dkisl hgiels dhpwld, 6/13/2009 yeus spwiv wojje rtyu

Notice that it does not replace the space(s) after the Month/Day

So, how can I create a $replacement parameter of preg_replace() that removes all spaces after the match and then append value with a single space so it would look like this?:

4/28/2009 hfdkkdi sielsl fidijg. 5/14/2009 fiisollei sikedi jdsildh 6/3/2009 diel dkisl hgiels dhpwld, 6/13/2009 yeus spwiv wojje rtyu

Thanks

Jeff in Seattle

Re: preg_replace() help: trim right space before append value

Posted: Tue Jun 30, 2009 11:15 am
by BornForCode

Code: Select all

 
$value = trim($value);//remove spaced from the beginning and end
$value = rtrim($value); // from right ltrim is for left,
$value = str_replace(' ','',$value); //this remove all spaces from your script :)
 

Re: preg_replace() help: trim right space before append value

Posted: Tue Jun 30, 2009 11:22 am
by jeff00seattle
Thanks for your reply, but...

I believe I cannot put your solution within the $replacement parameter of function preg_replace().

See: http://us.php.net/preg_replace

Correct me if I am wrong.

Jeff in Seattle

Re: preg_replace() help: trim right space before append value

Posted: Tue Jun 30, 2009 12:34 pm
by BornForCode

Code: Select all

 
str_replace(' ','',preg_replace('[0-9]{1,2}\/[0-9]{1,2}\s{1,}',$value,$string));
adding a space after means just 
str_replace(' ','',preg_replace('[0-9]{1,2}\/[0-9]{1,2}\s{1,}',$value,$string)).' ';
 

Re: preg_replace() help: trim right space before append value

Posted: Tue Jun 30, 2009 2:26 pm
by prometheuzz
jeff00seattle wrote:Hi

I having beating my head over the following, I want replacement to trim all right spaces from match before replace and then append a value with a single space...


A single preg_replace(...) can also do the trick:

Code: Select all

$text = '4/28 hfdkkdi sielsl fidijg. 5/14 fiisollei sikedi jdsildh 6/3 diel dkisl hgiels dhpwld, 6/13/2009 yeus spwiv wojje rtyu';
$expected = '4/28/2009 hfdkkdi sielsl fidijg. 5/14/2009 fiisollei sikedi jdsildh 6/3/2009 diel dkisl hgiels dhpwld, 6/13/2009 yeus spwiv wojje rtyu';
$mutated = preg_replace('#\d{1,2}/\d{1,2}(?![\d/])#', '$0/2009', $text);
 
if($mutated === $expected) {
  echo 'We did it!';
} else {
  echo "Alas, something went wrong...";
}

Re: preg_replace() help: trim right space before append value

Posted: Tue Jun 30, 2009 2:29 pm
by prometheuzz
BornForCode wrote:

Code: Select all

 
str_replace(' ','',preg_replace('[0-9]{1,2}\/[0-9]{1,2}\s{1,}',$value,$string));
adding a space after means just 
str_replace(' ','',preg_replace('[0-9]{1,2}\/[0-9]{1,2}\s{1,}',$value,$string)).' ';
 
You're not using any delimiters around your regex pattern, so that can never work.
Also, \s{1,} can be shortened to \s+