За последние 24 часа нас посетили 17353 программиста и 1720 роботов. Сейчас ищут 922 программиста ...

Замена в строке

Тема в разделе "PHP для новичков", создана пользователем MCTrane, 1 дек 2010.

  1. MCTrane

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

    С нами с:
    14 ноя 2009
    Сообщения:
    217
    Симпатии:
    0
    Например у меня есть строка " Значение='3' ", как мне любую цифру/ы или букву/ы, заменять например на "none",
    т.е. например есть у меня строка " Значение='3' Значение='0' Значение='8' Значение='1' ", мне надо значения 3, 0, 8, 1 заменить на none. Только я незнаю какие там могут быть значения, поэтому через str_replace у меня не получается, подскажите кто-нибудь как такое реализовывается?
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    блин, чел, слабо зайти пошариться в строковых функциях на php.net?

    регулярку б написал давно уже
     
  3. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Код (Text):
    1. /[0-9]+/
     
  4. MCTrane

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

    С нами с:
    14 ноя 2009
    Сообщения:
    217
    Симпатии:
    0
    Та, я никак не могу разобраться в регулярки, например вот тестирую функцию, почему вот этот код не работает?
    PHP:
    1. <?php
    2. $text = 'value="1d2fds"';
    3. $html = preg_replace( '/(value=\")([a-zA-Z_0-9])(\")/', '<i>$1</i>', $text );
    4. echo $html;?>
    Я хочу чтоб в этой ситуации вывело курсивом 1d2fds, но выводит просто value="1d2fds".
    Почему не работает, то?
     
  5. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    MCTrane

    Может ему заголовок послать какой? ;)
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я думаю проблема может быть в кодировке
     
  7. MCTrane

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

    С нами с:
    14 ноя 2009
    Сообщения:
    217
    Симпатии:
    0
    tommyangelo, зачем?
    побывал ставить
    header("Content-type: text/html; charset=utf-8");
    и
    header("Content-type: text/html; charset=windows-1251");
     
  8. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    MCTrane

    А ты смотришь на то что в окошке браузера, или на исходный код страницы?
     
  9. MCTrane

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

    С нами с:
    14 ноя 2009
    Сообщения:
    217
    Симпатии:
    0
    И туда, и туда
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    шепотом: а он случаем не хочет курсив в инпуте через value?
     
  11. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    igordata гений телепатии)))
     
  12. MCTrane

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

    С нами с:
    14 ноя 2009
    Сообщения:
    217
    Симпатии:
    0
    Ппц, нет кончено, сами попробуйте - тоже работать не будет.
     
  13. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Не проверял:
    Код (Text):
    1. (?<=")([a-z0-9_]+?)(?=")
     
  14. MCTrane

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

    С нами с:
    14 ноя 2009
    Сообщения:
    217
    Симпатии:
    0
    Apple
    О, спасибо большое
     
  15. MCTrane

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

    С нами с:
    14 ноя 2009
    Сообщения:
    217
    Симпатии:
    0
    Ещё вопрос:
    А как сделать такое:
    PHP:
    1. $HTML = preg_replace( '/(?<=value=")([a-z0-9_]+?)(?=")/', 'val', $HTML );
    Только чтобы при каждой замене заменялась на val_1, val_2 и т.д.?
     
  16. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
  17. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    MCTrane
    Наиболее оптимальное, если не требуется референций из preg_replace, с помощью preg_match_all выцепить варианты и поочередно их заменить уже с помощью str_replace
     
  18. <?=RPG?>

    <?=RPG?> Активный пользователь

    С нами с:
    19 ноя 2010
    Сообщения:
    451
    Симпатии:
    0
    Модификатор е
     
  19. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    С точки зрения читабельности получается каша, так же как при create_function.
     
  20. <?=RPG?>

    <?=RPG?> Активный пользователь

    С нами с:
    19 ноя 2010
    Сообщения:
    451
    Симпатии:
    0
    Ну preg_replace_callback, лямбда-функции в РНР есть.

    Вспомнил времена, когда их не было, а надо было сделать. Такой ппц конечно: пхп код в строке с экранированием, и ещё хрен отладишь.

    Кстати я ступил, сложно будет отследить вообще говоря инкремент замены. А preg_replace_callback - самое то.
    echo preg_replace_callback('/a/i', function($s){static $i = 1; return $i++;}, 'absaasklhdasdhsk');
     
  21. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Угу, в РНР 5.3 эта проблема решена.
    А если посмотреть - array_walk тот же. Как бы я не любил выносить функции, тем не менее оптимальным костылем был именно их набор во внешнем файле или классе.
    Кстати, вместо лямбда мне привычно их называть анонимными функциями.
     
  22. <?=RPG?>

    <?=RPG?> Активный пользователь

    С нами с:
    19 ноя 2010
    Сообщения:
    451
    Симпатии:
    0
    Я по аналогии с яваскрипт, в яваскрипте юзаю их гиперактивно:) В пхп всего один раз пришлось. И то тогда РНР 5.3 не вышел:( Да и обратную совместимость придется засунуть поглубже.