|
|
|
| Всем доброго дня!
Нужно выбрать все строки из десяти символов лат. алфавита, среди которых могут встречаться цифры.
Вот такая была регулярка: /\b[a-z\d]{10}\b/
Но она срабатывала, если попадалась последовательность только из десяти цифр, чего быть не должно. Буква, хотя бы одна, присутствовать обязана. В любом месте выражения.
Спасибо. | |
|
|
|
|
|
|
|
для: 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>";
?>
|
| |
|
|
|
|
|
|
|
для: Slo_Nik
(17.12.2011 в 12:19)
| | ОК! Спасибо!
Не решал подобные задачи более 2-х месяцев и навыки атрофировались. Как-то казалось, что в квадратных скобках каждый символ, кроме ^ - литерал. Но, как видно, ошибался.
Еще раз спасибо, Slo_Nik! | |
|
|
|
|
|
|
|
для: Deed
(17.12.2011 в 09:31)
| | У меня немного усложнилась задача.
Нужно спарсить только такие последовательности из 10-ти символов лат. алфавита в нижнем регистре, среди которых обязательно должна быть одна или более цифр.
Ничего на ум не приходит... | |
|
|
|
|
|
|
|
для: Deed
(17.12.2011 в 17:44)
| | ну откройте же справочник по регуляркам, в описании основ всё найдёте...
" + " | |
|
|
|
|
|
|
|
для: Slo_Nik
(17.12.2011 в 19:33)
| | Так [\d*a-z] или так [\d+a-z], кстати, не покатит. Квантификаторы * и + не действуют внутри квадратных скобок, они будут восприниматься как символы * или +. Вообще квадратные скобки - это всегда один символ, один из того, что указано внутри. В первом варианте сгодилось бы и [\da-z], а во втором нужно как-то опережающими или ретроспектвными проверками... а лучше просто вырезать подозрительную строку, да и посмотреть что внутри найденного средствами PHP или новым регулярным выражением, т.е. задействовать preg_replace_callback() или preg_match_all() с каскадом регулярных выражений. | |
|
|
|
|
|
|
|
для: 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);
|
| |
|
|
|
|
|
|
|
для: duhon
(18.12.2011 в 05:16)
| | не совсем точно работает. выдаёт совпадение где есть и одна цифра и одна буква
Array
(
[0] => Array
(
[0] => adkupjkg5g
[1] => 1234567f89
)
)
|
| |
|
|
|
|
|
|
|
для: Slo_Nik
(18.12.2011 в 19:22)
| | этого я и добивался.
10 символов, состоящих только из маленьких лат.букв и цифр, не допускается 10 букв или 10 цифр, все остальные варианты разрешены. | |
|
|
|
|
|
|
|
для: duhon
(18.12.2011 в 21:47)
| | извините, это я не внимательно прочитал условие )))) | |
|
|
|
|
|
|
|
для: duhon
(18.12.2011 в 05:16)
| | Гениально, duhon!
К моему стыду, после более чем двухмесячного перерыва в использовании регулярок, я не понимаю, КАК она работает.
(?=.{0,9}?\d) - "следом должен идти любые от нуля до девяти символов, и находиться одна цифра..." Фрагменты понятны. Но КАК ЭТО ВСЕ РАБОТАЕТ В АНСАМБЛЕ - я никак не пойму.
Спасибо еще раз, duhon! | |
|
|
|