И впрямь как-то странно себя ведет. Что с ним, что без. Одно и тоже.
Код:
<?
$text = '<table align=right other_attr>dfgdfgb<table align=right other_attr> <table>dc<table align=right other_attr>fg';
preg_match_all("!<table(.*?)>!si", $text, $descr);
echo "<textarea rows=15 cols=65>";
print_r($descr);
echo "</textarea>";
?>
Залез в свои скрипты. Я ввел вас в заблуждение данной ссылкой. Хотя сам ни раз руководствовался именно этим источником.
$_ =~ /^http\:\/\/((.+)\:(.+)\@)?(.+)$/
Конструкция ()?, а не ?(). Может я, как-то не так читаю, или автором допущена ошибка (неточность)? Обычно я использую: "(куча все, что может и не появится при разборе)?" Специально проверил вариант ?() - ? работает проверки впереди идущего символа.