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 :: Версия для печати :: switch и регулярные выражения
Форумы портала PHP.SU » PHP » Регулярные выражения » switch и регулярные выражения

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

1. irysik - 12 Марта, 2012 - 09:14:08 - перейти к сообщению
Подскажите можно использовать регулярные выражения в ветке case.Например вот так:
$z="1,2,4,8,gggggg rrrrrrr";
$q=strlen($z);
echo $q;
for ($i=0;$i<$q;$i++)

{$w=substr($z,$i,1);
//echo $w."<br>";
switch ($w)
{
case ",":{break;}
case "/[0-9]/":{

$res.="+<br>";
break;
}
case "/[A-Za-zÀ-ßà-ÿ\s]/":{$res.=$w;
break;
}
default: {$res.="не вверно";
break;
}
}//end switch

}//end for
echo $res;
2. snikers987 - 12 Марта, 2012 - 09:54:16 - перейти к сообщению
Синтаксически можно, для switch это будет просто строка для сравнения, но сравнения с патерном не будет происходить.
3. irysik - 12 Марта, 2012 - 11:00:14 - перейти к сообщению
snikers987 пишет:
Синтаксически можно, для switch это будет просто строка для сравнения, но сравнения с патерном не будет происходить.


А как тогда можно из строки взять сочетание букв,причем я не знаю с какой позиции начинаются буквы???
4. Мелкий - 12 Марта, 2012 - 11:31:22 - перейти к сообщению
irysik, не поверите - регуляркой.
Какая задача в оригинале?
5. irysik - 13 Марта, 2012 - 06:38:46 - перейти к сообщению
У меня есть строка, в которой цифры и буквы(словосочетание),разделены запятой.Проблема в том что я не знаю сколько там букв а сколько цифр.
Может быть :1,2,3,йуцуцйуцй фыкаваку, а может 1,6,8,9,10,15,ава аав или вообще не содержать цифр.
Мне нужно после первого вхождения буквы считать остаток строки,а перед буквами если есть цифры записать их в массив.
6. Мелкий - 13 Марта, 2012 - 08:54:31 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $sInput = '1,2,3,йуцуцйуцй фыкаваку';
  2. $rgDigits = array();
  3. $rgChunks = explode(',',$sInput);
  4. foreach($rgChunks as $iKey=>$mVal) {
  5. if (is_numeric($mVal)) {
  6. $rgDigits[] = $mVal;
  7. unset($rgChunks[$iKey]);
  8. } else break;
  9. }
  10. $sOutString = join(',', $rgChunks);
  11. var_dump($rgDigits, $sOutString);

Можно и без регулярки.
А можно - с:
PHP:
скопировать код в буфер обмена
  1. $sInput = '1,2,3,йуцуцйуцй фыкаваку';
  2. preg_match('@^([\d,]+),(\D+)$@i', $sInput, $rgMatch);
  3. $rgDigits = explode(',', $rgMatch[1]);
  4. $sOutString = $rgMatch[2];
  5. var_dump($rgDigits, $sOutString);
7. irysik - 13 Марта, 2012 - 10:29:50 - перейти к сообщению
Спасибо

 

Powered by ExBB FM 1.0 RC1