За последние 24 часа нас посетили 20138 программистов и 1679 роботов. Сейчас ищут 1863 программиста ...

Поиск плейсхолдеров, которые могут быть заключены в кавычки

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

  1. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    имеются именованные плейсхолдеры в строке, которые необходимо заменить значениями.
    плейсхолдеры могут обрамляться кавычками, или не обрамляться

    например, запрос
    [sql]SELECT * FROM tablica WHERE name='{name}' and status={status}[/sql]

    приходится делать подряд два запроса:

    $query = preg_replace_callback("#'{([^}]+)}'#sUi", array($this, 'holders_replace'), $query);
    $query = preg_replace_callback('#{([^}]+)}#sUi', array($this, 'holders_replace'), $query);

    а хотелось бы сделать одним запросом, примерно такой логики:

    если ДО плейсхолдера есть кавычка, то и ПОСЛЕ должна стоять кавычка.
    Пробовал делать через карманы "#('?){([^}]+)}\1#sUi" - не видит плейсхолдеров без кавычек.
     
  2. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Код (Text):
    1. ("#\'?{([^}]+)}\'?#sUi"
     
  3. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    Dima4321
    это простейшее решение не работает - последняя кавычка не берётся из-за опции U. Не совсем то решение, которое я искал
     
  4. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    А в чем смысл поисков?
    Иными словами, а какая разница взят плейсхолдер в кавычки или нет?
     
  5. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    Volt(220)
    я возвращаю данные, всегда обрамлённые кавычками.
    таким образом, если данные уже были обрамлены, мне нужно эти кавычки убрать.
     
  6. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
  7. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Посмотри результаты. Особенно последних двух вариантов.
    Карманы работают.
     
  8. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    первый и второй уже использую - подряд друг за другом.
    третий не учитывает последнюю кавычку. думаю над тем, чтобы убрать опцию U и не парить людям моск :)
    четвёртый пробовал - не работает =/
    последний вариант выводит в разных массивах:

    Код (Text):
    1. Array
    2. (
    3.     [0] => Array
    4.         (
    5.             [0] => {name}
    6.             [1] => '{status}'
    7.         )
    8.  
    9.     [1] => Array
    10.         (
    11.             [0] => name
    12.             [1] =>
    13.         )
    14.  
    15.     [2] => Array
    16.         (
    17.             [0] =>
    18.             [1] => status
    19.         )
    20.  
    21. )
    ладно, спасибо и на этом.
    более хорошего способа не нашли, значит я ещё не совсем дрова :-D
     
  9. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Работает четвертый.
    Ты сравни мою и свою запись.

    А остальные это я так, глядел что получается.
     
  10. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    Volt(220)
    прав, четвёртый способ работает - то, что нужно.
    не обратил внимание на отличия от моего. Спасибо.
    рад, что нашёлся всё же тот способ, который искал.
    не рад тому, что я всё же дрова :-D