Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2011, 17:48   #1
Farrel
Форумчанин
 
Аватар для Farrel
 
Регистрация: 21.04.2010
Сообщений: 144
По умолчанию регулярные выражения

Суть проблемы:
есть код
PHP код:
<?php
  $a
="123.abc.nj";
  echo (bool)
ereg('(([[:digit:]]+)\.([[:lower:]]+)\.([[:lower:]]))',$a,$b);
  echo 
"<br>";
?>
В данном случае всё работает нормально, а вот если строка не будет соответствовать выражению:
PHP код:
<?php
  $a
="123.abc.NJ";
  echo (bool)
ereg('(([[:digit:]]+)\.([[:lower:]]+)\.([[:lower:]]))',$a,$b);
  echo 
"<br>";
?>
код вообще признаков жизни не подаёт.
Это я что-то не то пишу, или для php в случае необходимости распечатать false это нормально, в смысле ничего не делать?
Farrel вне форума Ответить с цитированием
Старый 06.02.2011, 17:54   #2
xen
Пользователь
 
Регистрация: 13.03.2007
Сообщений: 45
По умолчанию

Пишешь правильно, просто это php так работает - ничего не выводит.
xen вне форума Ответить с цитированием
Старый 06.02.2011, 18:21   #3
Farrel
Форумчанин
 
Аватар для Farrel
 
Регистрация: 21.04.2010
Сообщений: 144
По умолчанию

продолжим тему. Сейчас экспериментировал со знаком +. В мануале написано что символ, указанный перед этим знаком должен повторяться 1 или более раз.
PHP код:
<?php
  $a
="123.abc.nj";
  echo (int)
ereg('(([[:digit:]])\.([[:lower:]])\.([[:lower:]]))',$a,$b);
  echo 
"<br>";
  foreach(
$b as $key=>$data)
  {
      echo 
"$key"."=>"."$data <br>";
  }
?>
почему если + не указан после каждого выражения ereg возвращает false?

Если на предыдущий вопрос я кое-как всё же могу ответить, то вот почему код

PHP код:
<?php 
  $a
="123.abc.nj"
  echo (bool)
ereg('(([[:digit:]]+)\.([[:lower:]]+)\.([[:lower:]]))',$a,$b); 
  echo 
"<br>"
  foreach(
$b as $key=>$data)
  {
      echo 
"$key"."=>"."$data <br>";
  }
?>
(+ отсутствует только в последней части выражения)
выводит

Код:
0=>123.abc.n 
1=>123.abc.n 
2=>123 
3=>abc 
4=>n
когда вроде бы последней строчкой должна стать

Код:
4=>nj
и почему тогда добавление + в последнем выражении вызывает всё же появление строки
Код:
4=>nj
в выводе?

Ну и последний вопрос: откуда появляются строки

Код:
0=>123.abc.n 
1=>123.abc.n
ведь согласно мануалу такая строка должна быть одна?

Последний раз редактировалось Farrel; 06.02.2011 в 18:24.
Farrel вне форума Ответить с цитированием
Старый 06.02.2011, 18:43   #4
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Поверьте - на все ваши вопросы есть логичные ответы, обьясняющие такое поведение...

НО - мой вам совет - не траттьте своё время на освоение всех примудростей ereg(), и вот почему:
Цитата:
Warning

This function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged.
Направьте лучше свои усилия на изучение preg_match() и PERL-совместимых Регулярных Выражений.

Вот толковый материал на эту тему.
Andkorol вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Регулярные выражения adwaer Общие вопросы .NET 4 24.02.2010 17:38
Регулярные выражения Marsik Помощь студентам 4 14.11.2009 14:13
Регулярные выражения ACE Valery PHP 5 14.10.2009 11:37
регулярные выражения wyvern PHP 3 09.04.2009 22:15
Регулярные выражения Adamant Общие вопросы C/C++ 1 26.11.2007 19:44