Регулярка

программирование php html JavaScript regexp

Есть html-страница, в ней таблица.
В таблице обычные строки <tr></tr>


<table>
<TR>
<TD>some_content</TD>
<TD>some_content fio some_content</TD>
<TD>some_content</TD>
</TR>
</table>

Вопрос: как вырезать td, в котором есть слово fio?
Вопрос бы не задавал, но следующая регулярка просто не работает:

`<td>.*fio.*</td>`Uuis

Она захватывает от самого первого TD сверху.

Примечание:
они все уже "жадные" за счет модификатора U

Примечание:
'`.*?`' это тоже самое что и '`.*`U'

Примечание:
Тут бы подошло что-то вроде - вырезать кусок, в котором не присутствует строка "<td>".

Примечание:
Nemo22
твоя регулярка сработала только потому, что она не учитывала соседние строки. Контент же нужно было вопринимать через модификатор "is", а не через "i", но я, конечно, упустил этот вопрос, так что все ок.

Собственно правильный вариант такой (мне подсказали его в моем соседнем вопросе):

$site_content = '
<table>
<TR>
<TD>some_content</TD>
<TD>
some_content fio
some_content
</TD>
<TD>some_content</TD>
</TR>
</table>
';
$my_word = 'fio';
$global_pattern = '`(<td>((?!<td>).)*?' . addslashes($my_word) . '.*?</td>)`uis';
preg_match($global_pattern, $site_content, $matches);
$result_td = $matches[1];
var_dump($result_td);
exit;
Ответы:
Гугли про "жадные" регулярки (greedy expressions).
<td>\s*fio\s*</td>
или если не fio не единствененно возможные буквы  то
<td>.*?fio.*?</td>
$b="<table>
<TR>
<TD>some_content</TD>
<TD id='some'>some_content fio some_content</TD>
<TD>some_content</TD>
</TR>
</table>";
preg_match_all("/<td[^>]*>.*fio.*<\/td>/i",$b,$j);
var_dump(htmlentities($j[0][0]));
Готово! http://www.tehplayground.com/#jv0TpJ8l9 ( откроется страничка, нажми там ctrl+enter )


12 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.