Здравствуте, подскажите, пожалуйста, как с помощью регулярных выражений за заменить это: <h1 class="MsoNormal">ПРАКТИКА ПРИМЕНЕНИЯ ТРУДОВОГО ЗАКОНОДАТЕЛЬСТВА </h1> на это <h2 class="rubric-title">ПРАКТИКА ПРИМЕНЕНИЯ ТРУДОВОГО ЗАКОНОДАТЕЛЬСТВА </h2>
Большое спасибо. Если не трудно ответьте, пожалуйста: 1. Что значит #...#, и чем это отличается от /.../? 2. Не могу до конца прочитать выражение (.*?) - "любое количество любых символов...", а что означает "?" ? 3. Что означает "U"; 4.И самое интересное это - $1, я понимаю, что это то, что игнорируется при замене, но откуда это берется/присваивается, чувствую это как-то связано с "?" из п.2))
1. ничем. кто как привык. главное ограничить шаблон регулярки. в моем случае если использовать / в качестве обрамления, пришлось бы экранировать <\/h1> 2. любое колво символов до того момента, пока не попадется </h1> 3. http://php.ru/manual/reference.pcre.pattern.modifiers.html 4. $1 Это то что хранится в (.*?)
Код (PHP): $str='<h1 class="MsoNormal">ПРАКТИКА ПРИМЕНЕНИЯ ТРУДОВОГО ЗАКОНОДАТЕЛЬСТВА </h1>'; $str=preg_replace('~</?\Kh1(?=(?:\sclass="MsoNormal"[^<>]*)?>)~ix','h2 class="rubric-title"',$str); echo $str;
Позвольте вопрос, а нахрена тут вообще регулярка? Можно же сделать без нее: Код (PHP): $str='<h1 class="MsoNormal">ПРАКТИКА ПРИМЕНЕНИЯ ТРУДОВОГО ЗАКОНОДАТЕЛЬСТВА </h1>'; $str = str_replace(array('h1','MsoNormal'), array('h2','rubric-title') , $str); echo $str;
Это круто, но в 95% случаев, когда надо именно заменить текст, достаточно str_replace. Стоит ли говорить, что он и работает быстрее и дешевле регулярок. Достаточно быстрее и дешевле, чтобы в документации было это отдельно отмечено. Регулярка имеет смысл, когда нужно заменить слово и его производные, например. А тут - точное совпадение. Накойчерт раскручивать регексповый движок ради такого?
Ради забавы! Fell-x27, А вообще ты не прав, в тексте может быть тоже h1 и другие текста, которые может не хочу заменять. =)
пф, возьми просто "<h1 class="", а не h1 Сразу вероятность ошибки снижается оч сильно. З.Ы. А вообще воровать чужой контент, парсить, и выдавать за свой - зло. Эт раз. Пробежка по контенту регуляркой - отстой. Лучше разберите его на HTML-объекты и оперируйте ими. Получится куда гибче система. А то вы все равно привязаны получаетесь к чужой верстке.
Подскажите, пожалуйста, вот такая регулярка: #<div align="right"><p>([А-Я][a-я]*\s[А-Я]\.\s[А-Я]\..*?)</p></div># работает при поиске: <div align="right"><p>Александров Г. М. </p></div> но не работает при переносе строки после дива: <div align="right"> <p>Александров Г. М. </p></div> пробовал так -#<div align="right">\n<p>([А-Я][a-я]*\s[А-Я]\.\s[А-Я]\..*?)</p></div># - не помогает
Возник опять вопрос, есть регулярка <p.*?align="right" class="MsoNormal">(.*?)</p>#si ...и кусок текста ниже. По задумке регулярка должна ловить помеченное зеленым(оно это и делает и это правильно), но почему оно еще отлавливает текст красным, который не надо ловить, я не пойму <p style="margin-bottom: 0.0001pt;" align="right" class="MsoNormal">Степанова М. И.</p> <h1 style="margin-bottom: 0.0001pt;" class="MsoNormal">ОБУЧЕНИЕ И АТТЕСТАЦИЯ ПЕРСОНАЛА</h1> <h2 style="margin-bottom: 0.0001pt;" class="MsoNormal">Кто оплачивает медосмотры работников?</h2> <p style="margin-bottom: 0.0001pt;" class="MsoNormal">Законно ли требование генерального директора об оплате работниками обязательных предварительных и периодических медосмотров? Обязан ли работодатель возместить расходы на прохождение медицинского осмотра, если гражданин, поступающий на работу в организацию, прошел медицинский осмотр до трудоустройства? Имеет ли право работодатель удерживать из заработной платы работника расходы на медицинский осмотр, если работник уволился, проработав менее какого-то срока (например, три месяца)?</p> <p style="margin-bottom: 0.0001pt;" align="right" class="MsoNormal">Умяров И. Г.</p> <h1 style="margin-bottom: 0.0001pt;" class="MsoNormal">ТЕХНИЧЕСКОЕ