Официальный сайт студ.городка НГТУ
Программирование и БД » [PHP] ereg() и регулярные выражения 

#1  08.06.09 16:27

[PHP] ereg() и регулярные выражения

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

Т.е., валидная матрица (1.1,1.2,-1.3;2.1,2.2,2.3;3.1,-3.2,3.3)

Поскольку это дело я решил писать на PHP, то работает это примерно в таком виде

Код: PHP:

<?php
function checkInput($string)
{
  $pattern="^[-0-9\.\,\;\(\)]+$" // пока так :)
 
 if (!ereg($pattern,$string)) return 1;
 return 0;
 
}
?>

Т.е. имеющаяся фгня проверяет на наличие недопустимых символов, но тут какбэ важен формат.

В общем, если кто чего поможет - буду очень признателен. А пока сам себе моск понасилую:
http://ru.php.net/function.ereg
http://www.regular-expressions.info/floatingpoint.html

Исправлено MakcyD (08.06.09 17:32)

Offline

#2  08.06.09 17:01

Re: [PHP] ereg() и регулярные выражения

Какбе, вроде чото такое работает:

Код: PHP:

$pattern="^(\(){1}(([-+]?[0-9]*\.?[0-9]*,{0,1})*;)*(\)){1}$";

Тем не менее, ваши усовершенствования greatly appreciated :)

Исправлено MakcyD (08.06.09 17:31)

Offline

#3  08.06.09 18:56

Re: [PHP] ereg() и регулярные выражения

MakcyD написал(а):

1.1,1.2,-1.3;2.1,2.2,2.3;3.1,-3.2,3.3

Не вполне понял задание, но ход мысли примерно должен быть такой:
\d+\.\d+ -это одна или больше цифр, потом точка, и еще одна или больше цифр
\d+\.\d+, -должны заканчиваться на запятую
(\d+\.\d+,)+  -эта группа должна встречатся не меньше одного раза
\d+\.\d+; -это у которых в конце ;
((\d+\.\d+,)+\d+\.\d+;)+ -группа ",,;", которая должна встречатся от одного раза и больше

Offline

#4  08.06.09 18:58

Re: [PHP] ereg() и регулярные выражения

еще минус забыл
-? -вопрос значит совпадение один раз или нет вообще
((-?\d+\.\d+,)+-?\d+\.\d+;)+

Offline

#5  10.06.09 15:06

Re: [PHP] ereg() и регулярные выражения

drug_detei написал(а):

еще минус забыл
-? -вопрос значит совпадение один раз или нет вообще
((-?\d+\.\d+,)+-?\d+\.\d+;)+

Согласно моими тестам и информации с сайта внутри скобок не надо литерализовавать символы:
т.е. вместо

Код: PHP:

ereg(^(-?\d+\.+\d)+$)

надо

Код: PHP:

ereg(^(-?\d+.+\d)+$)

Offline

#6  11.06.09 09:49

Re: [PHP] ereg() и регулярные выражения

Код: php:

$subject = "aaa.bbb aaaXbbb aaa%bbb"; 
$pattern = '/aaa(.)bbb/'; 
preg_match_all($pattern, $subject, $matches, PREG_OFFSET_CAPTURE);
echo "В тексте ".$subject."<pre>точка (.) - означает любой символ\n";
print_r( $matches);
echo "</pre></br></br>";
 
$pattern = '/aaa(\.)bbb/'; 
preg_match_all($pattern, $subject, $matches, PREG_OFFSET_CAPTURE);
echo "<pre>(\.) Экранированная точка находит только точку \n";
print_r( $matches);
echo "</pre>";

результат

Код::

В тексте aaa.bbb aaaXbbb aaa%bbb
точка (.) - означает любой символ
Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => aaa.bbb
                    [1] => 0
                )

            [1] => Array
                (
                    [0] => aaaXbbb
                    [1] => 8
                )

            [2] => Array
                (
                    [0] => aaa%bbb
                    [1] => 16
                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [0] => .
                    [1] => 3
                )

            [1] => Array
                (
                    [0] => X
                    [1] => 11
                )

            [2] => Array
                (
                    [0] => %
                    [1] => 19
                )

        )

)




(\.) Экранированная точка находит только точку 
Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => aaa.bbb
                    [1] => 0
                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [0] => .
                    [1] => 3
                )

        )

)

Исправлено drug_detei (11.06.09 09:56)

Offline

Программирование и БД » [PHP] ereg() и регулярные выражения 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.104 сек.
Выполнено 14 запросов.