Проблема с регуляркой

programmer_2006

Новичок
Проблема с регуляркой

У меня есть такая строка
PHP:
$strTmp = ';{"bread","breads","breading"};{"хлеб","хлеба","хлебом"};{"шмель","шмеля","шмели"};';
Это ее минимальный вид, так же элементов между {} может быть много.

Делаю так
PHP:
$tmp = preg_match( '/{.*?хлеба.*?}/si', $strTmp, $mat );
В итоге получаю
PHP:
Array ( [0] => {"bread","breads","breading"};{"хлеб","хлеба","хлебом"} )
Начало не отбрасуется а результат хочу такой
PHP:
{"хлеб","хлеба","хлебом"} или "хлеб","хлеба","хлебом"
Что то регулярки у меня с таким скрипом идут, работаю с ними раз в пол года но...

Заране благодарен за помощь.
 

Pingvin22

Новичок
PHP:
$tmp = preg_match( '/({(?:"хлеб(?:а|ом)?",?)+})/si', $strTmp, $mat );

print_r($mat);
PHP:
Array
(
    [0] => {"хлеб","хлеба","хлебом"}
    [1] => {"хлеб","хлеба","хлебом"}
)
$mat[1] результат!
 

programmer_2006

Новичок
Автор оригинала: HraKK
$tmp = preg_match( '/{[^}.*]хлеб.*}/Usi', $strTmp, $mat );
Спасибо то что нужно я пробовал [^}] но не [^}.*] видно еще долго то понимания регулярных выражений :) Спасибо.

-~{}~ 23.05.07 14:08:

Автор оригинала: Pingvin22
PHP:
$tmp = preg_match( '/({(?:"хлеб(?:а|ом)?",?)+})/si', $strTmp, $mat );

print_r($mat);
PHP:
Array
(
    [0] => {"хлеб","хлеба","хлебом"}
    [1] => {"хлеб","хлеба","хлебом"}
)
$mat[1] результат!
Спасибо но твой вариант не подходит так как окончания слов не известны. То я для примера написал :)
 

Pingvin22

Новичок
Автор оригинала: programmer_2006
Спасибо но твой вариант не подходит так как окончания слов не известны. То я для примера написал :)
тогда так:
PHP:
$tmp = preg_match( '/({(?:"хлеб[^,]*",?)+})/si', $strTmp, $mat );
 

programmer_2006

Новичок
Автор оригинала: Pingvin22
тогда так:
PHP:
$tmp = preg_match( '/({(?:"хлеб[^,]*",?)+})/si', $strTmp, $mat );
$tmp = preg_match( '/{[^}.*]хлеб.*}/Usi', $strTmp, $mat ); Вот тот результат который мне подходит :) Хотя твои варианты тоже хорошие спасибо.


Всетаки как мне кажется научится писать регулярные выражения можно только если их постоянно писать, надо развивать немного другое мышление.Благо спасает форум и куча готовых регулярок.Хотя конечно надеюсь что бы мне в будущем было больше заданий где я смогу применять регулярные выражения и научится их использовать.
 

romy4

invoke [brain]
programmer_2006
пишите регулярки добавляя по 1 правилу за тест, а не все сразу, а то вот такая хрень получается
 
Сверху