регулярные выражения: два соответствия в одной строке?

Dzen

Новичок
регулярные выражения: два соответствия в одной строке?

есть строка:
<object>text</object> 12345 <object>text</object>

хочется заменить text на другой текст, допустим text2.

что правильнее использовать ereg_replace или preg_replace?

дело в том, что написав регулярное выражение у меня заменяется вся строка,
то есть результат получается такой:
<object>new text</object>
а цифры 12345 вырезаются,
потому что регулярное выражение не учитывает </object> который в середине,
то есть регулярка берет первый <object> и последний </object> и режет всё что между ними:(


а нужно:
<object>new text</object> 12345 <object>new text</object>

доки читал, не нашел ничего.
Читал книгу, там было написанно что есть ключи для preg_replace который указывают на первое вхождение соответсвтия, может в этом дело? Но книгу найти не могу:(
Надо ключи использовать какие-то?

Хотя без ключей я бы сделал так выражение:
взять от <object> любые символы до !первого вхождения </object>!
И вот как указать первое вхождение, нигде найти не могу:(
 

A1x

Новичок
поищите в доках про жадность квантификаторов
preg_replace лучше
 

Dzen

Новичок
ну да, спасибо я обратил внимание на них как раз по ссылке:
http://phpclub.ru/detail/article/simple_regular

только там ошибка:
$text = preg_replace("/<as+href=(.*?)>.*?</a>/", "\\0 [\\1]", $text);

зачем там as не ясно, и перед тегом </a>, надо ставить обратный слеш, иначе выдает ошибку.
 

baev

‹°°¬•
Команда форума

Dzen

Новичок
A1x, спасибо! думал как раз в этом направлении :)

Автор оригинала: baev
— про обратный слэш там в комментах написано, а что такое "\s+" попробуйте сами узнать из документации:
http://ru2.php.net/manual/ru/reference.pcre.pattern.syntax.php
видимо там обратный слеш опять съелся, и должно быть <a/s+href
 
Сверху