регулярное выражение — ленивый режим не работает

#php #regex

#php #регулярное выражение

Вопрос:

Моя строка здесь:

 <li>super strona <em>{cena:100 zł netto}</em></li><li>foo strona <em>{cena:101 zł netto}</em></li></ul></p><h3>Strona super {cena:101 zł netto}</h3>
 

.. и я хочу изменить его с помощью регулярного выражения на это:

 <li>super strona <em>100 zł netto</em></li><li>foo strona <em>101 zł netto</em></li></ul></p><h3>Strona super 101 zł netto</h3>
 

Я пытаюсь сделать это так:
поиск: {cena:(.*?)}
заменить: 1

но он не работает должным образом. Вот эффект:

 <li>super strona <em>100 zł netto}</em></li><li>foo strona <em>{cena:101 zł netto</em></li></ul></p><h3>Strona super 101 zł netto</h3>
 

Для замены текста я использую функцию ereg_replace() PHP.

У вас есть какие-либо идеи по этому поводу?

Комментарии:

1. В качестве общего совета используйте preg вместо ereg .

Ответ №1:

Попробуйте это так:

  $text = preg_replace('#{cena:([^}]*)}#', '\1', $text);
 

Вам нужно экранировать { и } поскольку они являются частью кванторов в регулярном выражении. Я бы также посоветовал не использовать ereg* функции, поскольку они оказались чрезвычайно медленными.

Ответ №2:

 {cena:[^}]*}
 

попробуйте заменить на регулярное выражение выше, посмотрите, поможет ли это.