За последние 24 часа нас посетили 15013 программистов и 1766 роботов. Сейчас ищут 1424 программиста ...

помогите с регулярками

Тема в разделе "Регулярные выражения", создана пользователем polearnik, 23 дек 2015.

  1. polearnik

    polearnik Активный пользователь

    С нами с:
    29 июл 2010
    Сообщения:
    4
    Симпатии:
    0
    есть регулярка
    Код (PHP):
    1. \s(?![^}]*\{) 
    и есть текст
    Проблема в том что матчится и пробел за последней фигурной скобкой Мне нужно заменить все пробелы внутри фигурных скобок на нижнее подчеркивание Как избавится от пробелов за последней фигурной скобкой?

    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделать? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, результаты array/object dump и т.д.
     
  2. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    я бы сделал в два этапа.
    матчим все что внутри фигурных скобок /\{[^}]+\}/
    и уже внутри этого заменяем все пробелы на нижнее подчеркивание
     
  3. polearnik

    polearnik Активный пользователь

    С нами с:
    29 июл 2010
    Сообщения:
    4
    Симпатии:
    0
    пожскажите пожалуйста как это сделать Я с регулярками сильно на вы
     
  4. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    Код (PHP):
    1. $str='82. Kc3 {[%clk 0:01:29]} Bb5 {[%clk 0:03:11]} 0-1';
    2. $m=array();
    3. preg_match_all('/\{[^}]+\}/',$str,$m);
    4. foreach($m[0] as $key => $value) {
    5.     $m[0][$key]=str_replace(' ','_',$value);
    6. }
    7. $m=$m[0];
    8. print_r($m); 
    В противном случае использовать preg_replace, для замены много пробелов на один или сразу на " _ ".
    Код (PHP):
    1. preg_replace('/\s+/','_',$value);