Пример: $_='CAPTION_1_MAKET CAPTION_1_DATE'; Нужно удалить всё после второго подчёркивания. Решений куча. Одно из них: /[^_]+$/g Но у меня например, в начале, очень быстро написалось: /.*_/g Но к нему нужно применить отрицание. Как? Спасибо. Интересует именно регулярное выражение!
Отрицание... - как то я тут не совсем верно сказал. Попытаюсь ещё раз. Этот шаблон правильный: /.*_/g Но взять нужно не его, а всё что осталось в строке. Не CAPTION_1_ , а MAKET
PHP: <?php $_ ='CAPTION_1_MAKET CAPTION_1_DATE CAPTION_2_TEST CAPTION_2_BEST CAPTION_44444_LAST'; $match = test( $_ ); print_r( $match ); function test( $text ) { $str = $text . "\r\n"; preg_match_all('/_([^0-9_]+)\r\n/', $str, $data); if ( !empty( $data[1] ) ) { return $data[1]; } return false; }
@Artur_hopf, я не просил решение. Я спрашивал: Этот шаблон правильный: /.*_/g Но взять нужно не его, а всё что осталось в строке. Не CAPTION_1_ , а MAKET Интересует именно регулярное выражение!
Вы опять ищите решение задачи. Задача решена. Давно. Она приведена для примера. Этот шаблон правильный: /.*_/g Но взять нужно не его, а всё что осталось в строке. Не CAPTION_1_ , а MAKET Интересует именно регулярное выражение! Псевдокод: /!=(.*_)/ - то есть находим регулярное выражение, но берём не его, а всё кроме него. --- Добавлено --- А что такое \К ?
ну так замени все что попадает в шаблон на пустую строку, останется то что в него не входит. в чем проблема то?
проблема в том, что на пустую строку, в данном примере, как раз нужно заменять то, что не попадает в шаблон. Псевдокод, Перл: s/!=(.*_)//g --- Добавлено --- Похоже что того что я хочу - нет. Возможно потому, что на перле для этого есть например такое: @_=/.*_/g; В PHP, вероятно что тоже есть решение на уровне функций обрабатывающих результаты шаблонов --- Добавлено --- Изначально я хотел этого (псевдокод): preg_replace('/!=(.*_)/', '', $str);