Michael,

First off, you can eliminate the right-left stuff with the regex.  Use:

ereg("%ial\(([^[:blank:]]{1,},[0-9]{1,})\)",$text,$temp)

Adding the parentheses around your function arguments lets you reference
your "string,num" pattern directly with $temp[1].  For that matter, just
use:

ereg("%ial\([:blank:]*([^[:blank:])]+)[:blank:]*,[:blank:]*([^[:blank:])]+)[
:blank:]*\)",$text,$temp)

This may look ugly, but it allows you to reference each argument using
$temp[1] and $temp[2], without exploding or whatever.  Then, just verify
$temp[2] with is_numeric($temp[2]), and cast it to the type you want (e.g.
(integer) $temp[2]).

The [^[:blank:])]+ grabs one or more non-blank, non-right-paren characters.
The exclusion of right-paren prevents it from trying to match the closing
paren in your function.  The [:blank:]* allows for some whitespace padding,
without adding to what you're actually looking for.

So you'd have:

while
(ereg("%ial\([:blank:]*([^[:blank:])]+)[:blank:]*,[:blank:]*([^[:blank:])]+)
[:blank:]*\)",$text,$temp))
{
if (is_numeric($temp[2]))
    $num = (integer) $temp[2];
else
    continue;
$text = str_replace($temp[0],ial_search($temp[1],$num),$text);
}

It's important to note that doing things this way, you cannot have _any_
right parentheses in the arguments of %ial.  You could add pieces to your
regex to match more parens, but there is actually no way to do arbitrary
nesting in regex.  You need a parser for that.

John

"Michael Reynolds" <[EMAIL PROTECTED]> wrote in message
[EMAIL PROTECTED]">news:[EMAIL PROTECTED]...
> I have something in php, which goes through a line of
> text, replacing all occurences of %longip($a) with the
> long2ip/ip2long of whatever's in the perentheses.  I
> tried something similar with %ial($a,$b), to call
> ial_search($a,$b) and replace the %ial() with the
> result.  I have it so the longip can be stacked:
>   %longip(%longip(%longip($a)))
> and it would call the proper function(s) 3 times.  I'm
> trying to get it to do the same with %ial.  The %ial
> takes a string as the first arg, and a number as the
> second.  If the second is 0, it returns a number.
> What I have so far is:
>
> while
> (ereg("%ial\([^[:blank:]]{1,},[0-9]{1,}\)",$text,$temp))
> { $ialsearch =
> explode(",",right(left($temp['0'],-1),-5)); $text =
> str_replace($temp['0'],ial_search($ialsearch['0'],$ialsearch['1']),$text);
> }
>
> Any help will be greatly appreciated.
>
> __________________________________________________
> Do You Yahoo!?
> Send FREE video emails in Yahoo! Mail!
> http://promo.yahoo.com/videomail/



-- 
PHP Windows Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to