|
|
|
| Помогите составить регулярное выражения для набора различных цифр от 1 до 8, возможны через пробелы и запятые. Т.е. 1, 2, 3, 5 можно, а 1, 2, 1, 5 нельзя. | |
|
|
|
|
автор: ,,,, (09.07.2009 в 01:00) |
|
|
для: Марат
(08.07.2009 в 17:50)
| | придётся наверное делать выражение с 8-ю захватывающими подмасками
, типа ^([1-8]), ?([1-8])(?:, ?)?(?:([1-8]), ?)?(?:([1-8]), ?)?
и потом анализировать получаемый совпадением массив
или сделать не совсем рег.выражениями
<?
header('Content-type:text/plain; charset=cp1251');
function x_test($m){
global $outlist, $flag;
if ($flag) {
if (!in_array($m[1], $outlist))
array_push($outlist, $m[1]);
else $flag = false;
}
return $m[0];
}
foreach( array('1,2,3, 4, 5',
'8, 7, 6, 4, 5,4',
'2,3, 4,5,6,7',
'1,2,1,1,1,1,1,1,1,1,1,1,1,1,1'
) AS $list) {
$flag = true;
$outlist = array();
echo 'the list "'
. preg_replace_callback('#\b([1-8])\W*#', 'x_test', $list)
.'" is '. (($flag)? '': 'in') ."valid\n";
echo implode("\t", $outlist) ."\n\n";
}
|
или совсем не рег.выражениями
, например
<?
foreach( array('1,2,3, 4, 5',
'8, 7, 6, 4, 5,4',
'2,3, 4,5,6,7',
'1,2,1,1,1,1,1,1,1,1,1,1,1,1,1'
) AS $list) {
print_r($list = sscanf($list, "%u,%u,%u,%u,%u,%u,%u,%u\n")) ;
}
|
| |
|
|
|
|
|
|
|
для: ,,,,
(09.07.2009 в 01:00)
| | Спасибо! | |
|
|
|
|