За последние 24 часа нас посетили 17773 программиста и 1285 роботов. Сейчас ищут 1379 программистов ...

сложный отбор строки

Тема в разделе "Регулярные выражения", создана пользователем EDG_aka_Dima, 15 май 2007.

  1. EDG_aka_Dima

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

    С нами с:
    6 апр 2007
    Сообщения:
    39
    Симпатии:
    0
    Адрес:
    Воронеж
    вот такая сложная задача стоит, не знаю как сделать, помогите пожалуйста. Надо бы preg_match'ем проверять строку на такую маску:
    сначала идёт $, затем первый символ только англ буквы или _, затем буквы, цифры или _, затем идёт запятая с пробелом и всё повторяется заного... напрмер: $abc, $_gg, и т.д... Ну в общем думаю мысль ясна :D
     
  2. simpson

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

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Код (Text):
    1. ~\$[a-z_][a-z0-9_]*(?:,\s\$[a-z_][a-z0-9_]*)+~i
     
  3. EDG_aka_Dima

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

    С нами с:
    6 апр 2007
    Сообщения:
    39
    Симпатии:
    0
    Адрес:
    Воронеж
    я написал
    Код (Text):
    1. preg_match( "~\$[a-zA-Z_][a-zA-Z0-9_]*(?:,\s\$[a-zA-Z_][a-zA-Z0-9_]*)+~i", $vxpr )
    и строка
    Код (Text):
    1. $total, $names, $link, $txt
    не проходит :(
     
  4. simpson

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

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    почему у меня проходит? что я делаю не так?
    PHP:
    1. <?php
    2.  
    3. $reg = '~\$[a-z_][a-z0-9_]*(?:,\s\$[a-z_][a-z0-9_]*)+~i';
    4. $str = '$total, $names, $link, $txt';
    5. print preg_match($reg, $str) ? 'yup' : 'nope'; // output: yup
    6.  
    7. ?>
     
  5. EDG_aka_Dima

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

    С нами с:
    6 апр 2007
    Сообщения:
    39
    Симпатии:
    0
    Адрес:
    Воронеж
    хех :) прошу прощения

    а вот строка
    Код (Text):
    1. $77total, $:names, $link, $txt
    по идее не должна проходить, а проходит! о_О
     
  6. simpson

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

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    потому что там есть "$link, $txt"
     
  7. EDG_aka_Dima

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

    С нами с:
    6 апр 2007
    Сообщения:
    39
    Симпатии:
    0
    Адрес:
    Воронеж
    а как же сделать чтобы было чётко по правилу? чтобы этому правилу подчинялись все вводимые переменные, а не хотя бы одна из всех?
     
  8. simpson

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

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    думайте
     
  9. EDG_aka_Dima

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

    С нами с:
    6 апр 2007
    Сообщения:
    39
    Симпатии:
    0
    Адрес:
    Воронеж
    сам я думал сделать так:

    PHP:
    1. <?php
    2.  
    3. $vxpr = explode(", ", $vxpr);
    4.  
    5. For ($i = 0; ; $i++)
    6. {
    7.   if ( !preg_match( "/($[a-zA-Z_][a-zA-Z0-9_\=\'\"].*)/", $vxpr ) )
    8.   {
    9.     $ADMIN->error("фиг тебе");
    10.   }
    11. }
    12.      
    13. $vxpr = implode(", ", $vxpr);
    14.  
    15. ?>
    но код не хочет нормально работать.
    и как записать '=' не знаю :(
     
  10. stas_t

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

    С нами с:
    24 апр 2007
    Сообщения:
    500
    Симпатии:
    0
    Адрес:
    Courbevoie, France
    simpson
    может, всё-таки, сказать? мучается же человек :)
     
  11. simpson

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

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    stas_t
    если б он еще конкретно указал, какие строки он будет обрабатывать. =)
     
  12. EDG_aka_Dima

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

    С нами с:
    6 апр 2007
    Сообщения:
    39
    Симпатии:
    0
    Адрес:
    Воронеж
    ну как какие... :) в форму человек должен вбивать так называемые "входящие переменные" вида $var или $var="labyda". Причём если их несколько то они должны разделяться запятой. Я это хочу сделать чтобы всякую чушь не смогли вписать. :)

    stas_t, подскаи ты как тут лучше сделать :)
     
  13. stas_t

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

    С нами с:
    24 апр 2007
    Сообщения:
    500
    Симпатии:
    0
    Адрес:
    Courbevoie, France
    здравствуйте, уважаемый EDG_aka_Dima. вас приветствует робот учётной записи stas_t. мои настройки не позволяют пропускать к хозяину сообщения, не прошедшие лингвистический фильтр. ваше сообщение нарушает следующие правила:
    1. содержит грамматические и синтаксические ошибки
    2. просьба без ярко выраженного волшебного слова
    3. обращение на "ты" к незнакомому человеку

    требуется переформулировать запрос
     
  14. EDG_aka_Dima

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

    С нами с:
    6 апр 2007
    Сообщения:
    39
    Симпатии:
    0
    Адрес:
    Воронеж
    Прошу прощения, премногоуважаемый stas_t :) Помогите мне пожалуйста разобраться в этой сложной (для меня) ситуации. :roll:

    Надеюсь, что на английском языке копия не нужна... :D
     
  15. stas_t

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

    С нами с:
    24 апр 2007
    Сообщения:
    500
    Симпатии:
    0
    Адрес:
    Courbevoie, France
    EDG_aka_Dima
    да о чём речь, дарагой! как два байта переслать!

    PHP:
    1. <?php
    2.     $line = '$var1, $var2, $var3="$v5", $var4="678"';
    3.     $var = '(\$[A-Za-z_]\w*(?:\s*=\s*"[^"]*")?)';
    4.  
    5.     if (preg_match ("/^$var(?:,\\s*$var)*$/", $line))
    6.     {
    7.         $res = preg_match_all ("/$var/"
    8.             , $line
    9.             , $matches
    10.             );
    11.         print_r ($matches);
    12.     }
    13. ?>
    здесь значение внутри кавычек определяется как "любые символы кроме двойной кавычки". можно и экранированную кавычку позволить, но это уже из области высших сфер (в смысле, rtfm)

    в результате получите распарсенную на переменные строку
     
  16. EDG_aka_Dima

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

    С нами с:
    6 апр 2007
    Сообщения:
    39
    Симпатии:
    0
    Адрес:
    Воронеж
    Огромнейшее спасибо Вам, stas_t :) значит [^"] разрешает всё кроме " ... если написать [A-Za-z0-9_] то... так, ясно :)

    и в конце получается массив... а implode его что-то не хочет собирать в одну строку :( что делать?
     
  17. stas_t

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

    С нами с:
    24 апр 2007
    Сообщения:
    500
    Симпатии:
    0
    Адрес:
    Courbevoie, France
    а зачем вам его имплодить? оригинал у вас всегда в $line. хотя... implode (', ', $matches[0])
     
  18. EDG_aka_Dima

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

    С нами с:
    6 апр 2007
    Сообщения:
    39
    Симпатии:
    0
    Адрес:
    Воронеж
    Теперь всё как я и хотел :) Спасибо большое :)
     
  19. stas_t

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

    С нами с:
    24 апр 2007
    Сообщения:
    500
    Симпатии:
    0
    Адрес:
    Courbevoie, France
    пожалуйста
     
  20. Dagdamor

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

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    stas_t
    EDG_aka_Dima
    Жжоте товарищи :D
     
  21. EDG_aka_Dima

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

    С нами с:
    6 апр 2007
    Сообщения:
    39
    Симпатии:
    0
    Адрес:
    Воронеж
  22. EDG_aka_Dima

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

    С нами с:
    6 апр 2007
    Сообщения:
    39
    Симпатии:
    0
    Адрес:
    Воронеж
    А подскажите, как в preg_match'е можно делать сравнение текста не учитывая регистр?

    вот например как тут сделать?
    Код (Text):
    1. preg_match("/<(div|table|tr|td|th|a)/i", $text)
    и что означает i в конце?
     
  23. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    i - модификатор, который предназначен для сравнение текста без учёта регистра :)
     
  24. EDG_aka_Dima

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

    С нами с:
    6 апр 2007
    Сообщения:
    39
    Симпатии:
    0
    Адрес:
    Воронеж
    хехе :D спасибо большое :D
     
  25. EDG_aka_Dima

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

    С нами с:
    6 апр 2007
    Сообщения:
    39
    Симпатии:
    0
    Адрес:
    Воронеж
    Подскажите мне пожалуйста. Решил сам сделать выделение синтаксиса html. Т.е. берётся код, преобразовывается как нада и выводится. Конечно есть разные готовые, но некоторые глючные + сам хочу сделать :)
    Ток вот у меня не получается. Как обозначить, что именно тот элемент, который будет выделояться, находится именно между скобками < и > ?