Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Последовательность из десяти лат. символов нижнего регистра, но могут быть и цифры
 
 автор: Deed   (17.12.2011 в 09:31)   письмо автору
 
 

Всем доброго дня!
Нужно выбрать все строки из десяти символов лат. алфавита, среди которых могут встречаться цифры.
Вот такая была регулярка: /\b[a-z\d]{10}\b/
Но она срабатывала, если попадалась последовательность только из десяти цифр, чего быть не должно. Буква, хотя бы одна, присутствовать обязана. В любом месте выражения.

Спасибо.

  Ответить  
 
 автор: Slo_Nik   (17.12.2011 в 12:19)   письмо автору
 
   для: Deed   (17.12.2011 в 09:31)
 


<?php
 $str 
"1234567892
              adcbsjkg5g
              1234567f89
               abcdfiesfr"
;
$pattern "|[\d*a-z]{10}|s";
preg_match_all($pattern$str$out); 
echo 
"<pre>";
   
print_r($out);
echo 
"</pre>";
?>

  Ответить  
 
 автор: Deed   (17.12.2011 в 15:39)   письмо автору
 
   для: Slo_Nik   (17.12.2011 в 12:19)
 

ОК! Спасибо!
Не решал подобные задачи более 2-х месяцев и навыки атрофировались. Как-то казалось, что в квадратных скобках каждый символ, кроме ^ - литерал. Но, как видно, ошибался.
Еще раз спасибо, Slo_Nik!

  Ответить  
 
 автор: Deed   (17.12.2011 в 17:44)   письмо автору
 
   для: Deed   (17.12.2011 в 09:31)
 

У меня немного усложнилась задача.
Нужно спарсить только такие последовательности из 10-ти символов лат. алфавита в нижнем регистре, среди которых обязательно должна быть одна или более цифр.

Ничего на ум не приходит...

  Ответить  
 
 автор: Slo_Nik   (17.12.2011 в 19:33)   письмо автору
 
   для: Deed   (17.12.2011 в 17:44)
 

ну откройте же справочник по регуляркам, в описании основ всё найдёте...

" + "

  Ответить  
 
 автор: cheops   (17.12.2011 в 20:33)   письмо автору
 
   для: Slo_Nik   (17.12.2011 в 19:33)
 

Так [\d*a-z] или так [\d+a-z], кстати, не покатит. Квантификаторы * и + не действуют внутри квадратных скобок, они будут восприниматься как символы * или +. Вообще квадратные скобки - это всегда один символ, один из того, что указано внутри. В первом варианте сгодилось бы и [\da-z], а во втором нужно как-то опережающими или ретроспектвными проверками... а лучше просто вырезать подозрительную строку, да и посмотреть что внутри найденного средствами PHP или новым регулярным выражением, т.е. задействовать preg_replace_callback() или preg_match_all() с каскадом регулярных выражений.

  Ответить  
 
 автор: duhon   (18.12.2011 в 05:16)   письмо автору
 
   для: Deed   (17.12.2011 в 17:44)
 

пробуй, если я нигде не ошибся то ниже рулярка находит в тексте 10 символов состоящие из латинских букв нижнего регистра где присутствует хотя бы 1 цифра, не допускается последовательность из 10 цифр или 10 букв.
preg_match_all('/(?=.{0,9}?\d)(?=.{0,9}?[a-z])[\da-z]{10}/', $text, $match);

  Ответить  
 
 автор: Slo_Nik   (18.12.2011 в 19:22)   письмо автору
 
   для: duhon   (18.12.2011 в 05:16)
 

не совсем точно работает. выдаёт совпадение где есть и одна цифра и одна буква

Array
(
    [0] => Array
        (
            [0] => adkupjkg5g
            [1] => 1234567f89
        )

)

  Ответить  
 
 автор: duhon   (18.12.2011 в 21:47)   письмо автору
 
   для: Slo_Nik   (18.12.2011 в 19:22)
 

этого я и добивался.
10 символов, состоящих только из маленьких лат.букв и цифр, не допускается 10 букв или 10 цифр, все остальные варианты разрешены.

  Ответить  
 
 автор: Slo_Nik   (19.12.2011 в 11:31)   письмо автору
 
   для: duhon   (18.12.2011 в 21:47)
 

извините, это я не внимательно прочитал условие ))))

  Ответить  
 
 автор: Deed   (20.12.2011 в 23:52)   письмо автору
 
   для: duhon   (18.12.2011 в 05:16)
 

Гениально, duhon!
К моему стыду, после более чем двухмесячного перерыва в использовании регулярок, я не понимаю, КАК она работает.

(?=.{0,9}?\d) - "следом должен идти любые от нуля до девяти символов, и находиться одна цифра..." Фрагменты понятны. Но КАК ЭТО ВСЕ РАБОТАЕТ В АНСАМБЛЕ - я никак не пойму.

Спасибо еще раз, duhon!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования