Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > разбор строки


Автор: znr 19.3.2008, 17:12
Всем привет, я понимаю вопрос простой, но все-же вынужден обратиться. Сколькими способами можно посчитать сколько точек в строке вида 3.2.1, при этом сначала надо проверить строку на корректность. Что она не вида .3..2.1. Т.е. конструкция 3.2.1 или 3.2 или 3.2.1.0 это строго. Т.е. чтобы точки не шли друг за другом и не было точек в начале или в конце строки. Заранее благодарен.

Автор: Feldmarschall 19.3.2008, 17:20
Что значит "сколькими способами"? способов бесконечное количество.
И нельзя ли приводить не абстрактную задачу про строки в вакууме, а реальную проблему, вызвавшую столь странный вопрос?
Заранее большое спасибо.

Автор: awers 19.3.2008, 17:27
регулярным выражением (preg_math) проверить валидность а кол-во вхождений подстроки в строку substr_count

Добавлено через 43 секунды
Feldmarschall, ты чего это? ) вроде нормальный вопрос...

Автор: Feldmarschall 19.3.2008, 17:36
awers, опыт.
Напишешь человеку рег вида \d\., а он потом скажет, что могут быть не цифры - и так далее.
Всегда луше описывать реальную изначальную задачу, а не свои проблемы с её решением. Может, там точки вовсе считать не нужно на самом деле.
Не говоря уже о странной формулировке "сколько может быть способов".



Автор: awers 19.3.2008, 17:38
В отношении "сколько может быть способов" - ты прав на все 100% )
 smile прекращаем 

Автор: Feldmarschall 19.3.2008, 17:41
посимвольный парсинг, кстати - тоже вполне себе решение. проверка и подсчет в одном флаконе.

Автор: awers 19.3.2008, 17:43
znr, решение то тебе полностью писать ненадо?

Автор: grimweb 19.3.2008, 19:38
Ну...вот решил сваять такой скрипт тебе в помощь... 
Не очень умело, зато с самыми лучшими побуждениями) smile
Короче, функцию в студию!!!  smile  smile  smile 
Код

<?php
$str = "3..5";
(string)$str; // приводим наше число к строковому типу, если оно к нему еще не приведено (в посте не было сказано, чтопредставляет из себя исходная переменная)
trim($str); // удаляем в строке все ведущие и заключительные пробелы
for($i = 2; $i < strlen($str); $i++) // пишем цикл, перебирающий все варианты, где точек больше, чем надо
{
if(strpos($str, str_repeat(".", $i)) == true)
{
die("Точек больше, чем надо..."); // выходим, если точек больше чем надо (больше 1)
}
}
if(strpos($str, ".") == true)
{
$s_c = substr_count($str, ".");
echo "Кол - во точек (".") в строке равно: $s_c";
}
else
{
echo "Точек не обнаружено :-(";
}
?>

Автор: awers 19.3.2008, 19:43
grimweb, ойой ... ты чего ) этж регуляркой делать в добрый путь ) одна строка всего

Автор: grimweb 19.3.2008, 19:49
awers, это ты чего  smile :-((( Целый час писал) Если не трудно, обьясни пожалуйста, как так сделать и какой еще регуляркой?? Пожалйста подоходчивей, для меня это очень важно...

Добавлено через 2 минуты и 46 секунд
АнВерС!!!! Ты меня слышишь???)) Как сделать то?? А?

Автор: Canarat 19.3.2008, 20:08
grimweb, тут тебе не чат.
Код

<?php
$str="3.2.1.4.0"; $COUNT=0;
if(preg_match("/^\d+([\d\.]*)\d+$/",$str,$mt))
$COUNT=count(explode(".",$str))-1;
echo $COUNT;
?>

Что-нибудь в таком стиле.

Автор: grimweb 19.3.2008, 20:14
Цитата(Canarat @ 19.3.2008,  20:08)
grimweb, тут тебе не чат.
Код

<?php
$str="3.2.1.4.0"; $COUNT=0;
if(preg_match("/^\d+([\d\.]*)\d+$/",$str,$mt))
$COUNT=count(explode(".",$str))-1;
echo $COUNT;
?>

Что-нибудь в таком стиле.

Я знаю)
А за ответ спс огромное. в будущем учту!

Автор: Canarat 19.3.2008, 20:19
Отметь тему решенной.

Автор: grimweb 19.3.2008, 20:37
А... еще проверку на точку, идущую последней или первой в строке забыл... но какая теперь раздница... существует лучшее решение...

Автор: Canarat 19.3.2008, 20:49
Код

<?php
$str="3.2.1.4.0"; $COUNT=0;
if(preg_match("/^(((\d+)\.)*)\d+$/",$str,$mt))
$COUNT=count(explode(".",$str))-1;
echo $COUNT;
?>

Вот лучший вариант.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)