2 All, кто сюда парит перл... Я вот смотрю на Вас уже дня три и больно становится...
Ребята пните меня больно, но это форум по РНР и решение предложенной проблемы простое:
preg_match_all("/<td(.*?)>(.*?)(?=[<\n\s])/s",$line,$matches);
print_r($matches);
Объясняю приведенный рег
<td(.*?)> - матчит открытый тег td
(?=[<\n\s]) - позитивная ретроспективная проверка!
ее суть заключается в том, что она совпадает не с символом, а с местом в тексте... данная ретроспективная проверка совпадет перед символом новой строки, перед пробелом и перед открывающеяся < нового тега,
само значение после тега <td> запоминается за счет выражения
(.*?)
Разберем выражение .*?
точка со звездочкой будут матчить все после первого открытого тега td, нам это не надо... с жадностью в таком случае надо бороться... боремся:
Ставим ? , который укажет, что надо матчить все, но если надо что-то отдать для других частей рега, которые идут после (.*?), то ОТДАВАТЬ ОБЯЗАТЕЛЬНО, тот же алгоритм и в <td(.*?)> матчить все от
<td до
> если не надо матчить то, что внутри тега <td class=bla>, то ставятся несохраняющие круглые группирующие скобки (?:.*?)
Вот вроде и все... данному регу пофигу, закрываются у тебя теги <td> или нет!