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]