# [EMAIL PROTECTED] / 2006-10-09 22:01:34 +0200:
> Thank you Ilaria and Roman for your input. I did not know that preg
> is able to deal with PCRE patterns.
"preg" is obviously short for "Perl REGular expressions", while
PCRE positively means Perl-Compatible Regular Expressions.
The regexp syntax from Perl is a superset of POSIX "extended"
regexps, so anything ereg_ function accept will be good for
preg_ as well (but beware of pattern delimiters).
> As a matter of fact I came up
> with the following solution (if someone is interested):
What problem does it solve? I mean, why are you trying to avoid
preg_replace_callback() in the first place?
> the function takes a text and an array with converters like:
>
> $converters[] = array ( "metric" => "mm", "imperial" => "in",
> "ratio" => 0.039370079, "round" => 1 );
> $converters[] = array ( "metric" => "m", "imperial" => "ft", "ratio"
> => 3.280839895, "round" => 1 );
>
>
> function convertTextString ( $text, $convertTable )
> {
> # this function takes a text string, searches for numbers to
> convert, convert those numbers and returns
> # the complete text again.
>
> if ( !ereg ( "[[:digit:]]", $text ) ) // if the text does not
> contain any numbers, return the text as it is
> {
> return $text;
> }
>
> foreach ( $convertTable as $convertKey => $convertUnit )
> {
> $pattern =
> "((\d{1,10}[,|.]*\d{0,10})*(\s)(%s)([$|\s|.|,|\)|/]+| $))"; //
> this regex
> looks for a number followed by white space, followed by the metric unit,
> followed by a closing character like ".", "," or ")"
> $pattern = sprintf ( $pattern, $convertUnit['metric'] );
>
> while ( preg_match ( $pattern, $text, $matches ) )
> {
> $matches[1] = str_replace ( ",", ".", $matches[1] );
> // in case numbers are written like "6,6 m", we need
> to replace "," with
> "."
> // because we do not want to return 0, we have to
> make shure that the new value is not zero.
> $itterator = 0;
> do {
> $value = round ( ( $matches[1] *
> $convertUnit['ratio'] ), $convertUnit['round']
> + $itterator );
> ++$itterator;
> } while ( $value == 0 || $itterator == 10 );
>
> $replacement = $value . "$2" .
> $convertUnit['imperial'] . "$4";
> $text = preg_replace ( $pattern, $replacement,
> $text, 1 );
> }
> }
> return $text;
> }
--
How many Vietnam vets does it take to screw in a light bulb?
You don't know, man. You don't KNOW.
Cause you weren't THERE. http://bash.org/?255991
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php