php regex, strip spaces between numbers (with a catch)...

Any questions involving matching text strings to patterns - the pattern is called a "regular expression."

Moderator: General Moderators

Post Reply
wilbur_wc
Forum Newbie
Posts: 2
Joined: Tue Nov 17, 2009 11:07 am

php regex, strip spaces between numbers (with a catch)...

Post by wilbur_wc »

two part question...

PART 1...
part one is really simple, but for some reason it's just not happening for me... i need to find and replace all numbers which have a space between them...

ex: 9 0 8would become 908 & 6 9 would become 69

what're the proper preg_replace attributes i'd need to achieve this?


PART 2...
this one is a little tricky... i also have some numbers like 1,000 that are showing up as 1 ,000 or 1, 000... so i need to get rid of the unwanted space, but there's a catch... if the line which contains the number we're potentially replacing also contains the string respective, then i need leave the space intact. the reason being, some number/comma combinations represent two separate values as opposed to a thousand delimiter (this case can be identified by the line containing somewhere the string respective).

thanks so much
User avatar
ridgerunner
Forum Contributor
Posts: 214
Joined: Sun Jul 05, 2009 10:39 pm
Location: SLC, UT

Re: php regex, strip spaces between numbers (with a catch)..

Post by ridgerunner »

This should do the trick:

Code: Select all

<?php
function fixnums($text) {
	// First remove any one sapce between two digits.
	$text = preg_replace('/(\d) (?=\d)/', '$1', $text);
	// Next process lines which do NOT have the word "respective"
	$re = '/^((?!\brespective\b).)+$/mi';
	$text = preg_replace_callback($re, '_fixnums_callback', $text);
	return $text;
}
function _fixnums_callback($matches) {
	// Remove space from comma separated digits.
	$re = '/(\d)(?: ,|, )(?=\d{3}\b)/';
	return preg_replace($re, '$1,', $matches[0]);
}
?>
Post Reply