Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Ответ на "урок" по регуляркам
Форумы портала PHP.SU » PHP » Регулярные выражения » Ответ на "урок" по регуляркам

Страниц (1): [1]
 

1. DedMorozzz - 31 Августа, 2010 - 12:52:13 - перейти к сообщению
Чёт разлогинивает сразу, как только захожу в тему, где по идеи должен быть ответ, а именно сюда.
Выкладываю ответ на следующую задачу: "Дана строка. Проверьте, все ли символы в ней уникальны."
Решение одной регуляркой. В случае чего - можно вынести за пределы и сделать более красиво. Но насколько ясно по ТЗ - именно регуляркой и надо было. Вот код:
PHP:
скопировать код в буфер обмена
  1. $user_text = 'asskxlzxpa';
  2.  
  3. $Unique_content = preg_replace_callback('#(.*)#',create_function('$matches','
  4.  
  5. $a   = $matches[0];
  6. $len = strlen($a);
  7. $err = \'\';
  8. for($i=0;$i<$len;$i++){
  9.    $end_len = $len-$i;
  10.    for($j=0;$j<$end_len;$j++){
  11.  
  12.        if(!preg_match(\'#^.{\'.$i.\'}(\'.$a[$i].\').{\'.$j.\'}(?!\\1)#\',$a))
  13.        $err.= \'Position - \'.($i+1).\' and \'.($i+$j+2).\'. Symbol - "\'.$a[$i].\'"<br />\';
  14.    }
  15. }
  16.  
  17. if (empty($err)) return \'All Good!\';
  18. else return \'Recurrence found!<br />\'.$err;
  19.  
  20. '),$user_text,1);
  21. echo $Unique_content;


Или вариант по проще:
PHP:
скопировать код в буфер обмена
  1. $user_text = 'askxlzp';
  2. if(preg_match('#(.).*?\\1#',$user_text)) echo "Recurrence found!";
  3. else echo "All Good!";



Остальные интересные пункты - позже напишу.

ЗЫ: Модераторы - перенесите мб ответ туда? Только так, что бы я мог добавлять что либо. Сейчас - не могу. Выше написал - разлогинивает
2. DedMorozzz - 01 Сентября, 2010 - 14:04:16 - перейти к сообщению
Следующая - проверить правильность даты. Это простой вариант. Можно сделать более сложную проверку зависимостей чисел, что бы даты 00 - не пропускало, но тогда в регулярке - никто не разберётся.
Код:
PHP:
скопировать код в буфер обмена
  1. $a='01-2-57';
  2.  
  3. if(preg_match('#^((([0-2][0-9]|[3][0-1])-(0?[1,3,5,7,8]|10|12))|(([0-2][0-9]|30)-(0?[4,6,9]|11))|([0-2][0-9]-0?2))-([0-9]{4}|[0-9]{2})$#',$a)) echo "Yep!";
  4. else echo "Mmmm...NO!";
3. Uchkuma - 01 Сентября, 2010 - 15:21:05 - перейти к сообщению
DedMorozzz пишет:
ЗЫ: Модераторы - перенесите мб ответ туда?
Та тема для уроков, а не для ответов.
4. DedMorozzz - 01 Сентября, 2010 - 16:09:50 - перейти к сообщению
эм. Ну как сказать. Там есть линка. В самом конце - ответы вы можете получить ТУТ(и линка). Пройдя по которой я не увидал того, что обещали.
(Добавление)
Ну и последнее.
Необходимо взять в кавычки значения элементов массивов. Таким образом, что бы ф-и и переменые не брались. А лишь текст.
PHP:
скопировать код в буфер обмена
  1. $a = '
  2. $b   = $_POST[aaa];
  3. $row = $_GET[aaa()];
  4. $d   = $row[$aaa];
  5. $e   = $PASS[\'aaa\'];
  6. ';
  7.  
  8. $a=preg_replace('#\$([A-zА-яёЁ][0-9A-zА-яёЁ_]+)\[([0-9A-zА-яёЁ_]+)\]#isu','$$1[\'$2\']',$a);
  9.  
5. JustUserR - 01 Сентября, 2010 - 17:05:27 - перейти к сообщению
DedMorozzz пишет:
Там есть линка. В самом конце - ответы вы можете получить ТУТ(и линка). Пройдя по которой я не увидал того, что обещали
Для более полного описания регулярных выражений важно обратить внимание на использованые кодовые таблицы из шаблонов и провяреющих текстов а также внутренних региональных настроек - дело в том что регулярыне выраженя в особенности при работе с классами символов привязаны к некоторому символьному сравнению которое должно быть явно определено - и кроме того при исполнении в web-среде возникает множество других кодировок которые могут варьироваться - по этой причине желательно по возможности использовать в шаблоне представление символов в виде \xFF или chr(f) - что предоставляет независимость от кодировки самого исходного файла
6. DedMorozzz - 01 Сентября, 2010 - 17:11:23 - перейти к сообщению
Цитата:
желательно по возможности использовать в шаблоне представление символов в виде \xFF или chr(f) - что предоставляет независимость от кодировки самого исходного файла
В смысле все символы указывать так? Иль что подразумевается?
И не проще ли делать так: #regexp#u
т.е. указать, что это юникод.
7. JustUserR - 02 Сентября, 2010 - 17:41:01 - перейти к сообщению
DedMorozzz пишет:
В смысле все символы указывать так? Иль что подразумевается?
В приведенном выше примере имелось в виду что при записи шаблонов регулярных выражений в них используются некоторые строковые константы - таким образом дальнейшая работа по поиску будет зависеть не только от кодовой таблицы в которой поступает внешняя информация - но и от кодировки в которой сохранен исходный код PHP-скрипта
8. Champion - 04 Сентября, 2010 - 11:15:38 - перейти к сообщению
DedMorozzz, разлогинивало, наверное, потому что ссылка на forum.php.su, а вы авторизовались на php.su/forum.

Переносить не надо, пусть отдельной темой будет. Там не надо отвечать. По первому посту, конечно имелся в виду второй вариант)
C датой слабенько) Последенее нормально вроде

 

Powered by ExBB FM 1.0 RC1