Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Регулярные выражения: извлечь телефон из строки
 
 автор: sivira   (01.09.2011 в 11:49)   письмо автору
 
 

Доброе утро Помогите в такой проблеме:
есть строка вида $dop="ONT-да/ zteg_f660/ Москва, ул. Ленина, д. 22 кв. 22 709501";
функция function find_phone($dop)
{
$find_t='';

if (ereg("ПС[0-9]{4,5}",$dop,$ph)){
$find_t=$ph[0];}
elseif (ereg("пс[0-9]{4,5}",$dop,$ph)){
$find_t=$ph[0];}
elseif (ereg("[0-9]{5,6}",$dop,$ph)){
$find_t=$ph[0];}
if ($find_t=='') $find_t='no';
return($find_t);
} отрабатывает отлично
как только я меняю строку на
$dop=""ONT-да/ zteg_f660-ZTEGx70012F57/ Могилев, ул. Профсоюзная, д. 22 кв. 22 799501;

есств-но функция берет первые 5 или 6 цифр подряд и это получается 70012 а мне надо чтоб всегда функция брала 5 или 6 цифр после адреса, т.е. тел Надо как -то разбивать строку на части - помоги как лучше её разбить чтоб функция отрабатывала верно

  Ответить  
 
 автор: cheops   (01.09.2011 в 11:58)   письмо автору
 
   для: sivira   (01.09.2011 в 11:49)
 

А телефон всегда в конце? Если да, то может стоит привязаться к концу строки при помощи символа $
<?php
  $dop 
"ONT-да/ zteg_f660-ZTEGx70012F57/ Могилев, ул. Профсоюзная, д. 22 кв. 22 799501";
  echo 
find_phone($dop);

  function 
find_phone($dop)
  {
    
$find_t='';

    if (
ereg("ПС[0-9]{4,5}$",$dop,$ph)){
      
$find_t=$ph[0];}
    elseif (
ereg("пс[0-9]{4,5}$",$dop,$ph)){
      
$find_t=$ph[0];}
    elseif (
ereg("[0-9]{5,6}$",$dop,$ph)){
      
$find_t=$ph[0];}
    if (
$find_t==''$find_t='no';

    return(
$find_t);
  }
?>

  Ответить  
 
 автор: sivira   (01.09.2011 в 12:00)   письмо автору
 
   для: cheops   (01.09.2011 в 11:58)
 

в том тои дело что не всегда но после назв города точно

  Ответить  
 
 автор: cheops   (01.09.2011 в 12:05)   письмо автору
 
   для: sivira   (01.09.2011 в 12:00)
 

Тогда привяжитесь к границе слова
<?php 
  $dop 
"ONT-да/ zteg_f660-ZTEGx70012F57/ Могилев, ул. Профсоюзная, д. 22 кв. 22 799501"
  echo 
find_phone($dop); 

  function 
find_phone($dop
  { 
    
$find_t=''

    if (
ereg("[[:<:]]ПС[0-9]{4,5}[[:>:]]",$dop,$ph)){ 
      
$find_t=$ph[0];} 
    elseif (
ereg("[[:<:]]пс[0-9]{4,5}[[:>:]]",$dop,$ph)){ 
      
$find_t=$ph[0];} 
    elseif (
ereg("[[:<:]][0-9]{5,6}[[:>:]]",$dop,$ph)){ 
      
$find_t=$ph[0];} 
    if (
$find_t==''$find_t='no'

    return(
$find_t); 
  } 
?>

  Ответить  
 
 автор: sivira   (01.09.2011 в 14:00)   письмо автору
 
   для: cheops   (01.09.2011 в 12:05)
 

а можно поподробнее про границу слова [[:<:]] ?

  Ответить  
 
 автор: cheops   (01.09.2011 в 14:32)   письмо автору
 
   для: sivira   (01.09.2011 в 14:00)
 

Фактически вы границами требуете, чтобы последовательность окружали либо пробельные символы, либо конец строки. В общем все что угодно, только не другие символы, образующие слова и числа.

  Ответить  
 
 автор: f111   (01.09.2011 в 14:20)   письмо автору
 
   для: cheops   (01.09.2011 в 12:05)
 

мне тоже интересно про границу, я слышал только про \b, [:<:] аналог?

  Ответить  
 
 автор: cheops   (01.09.2011 в 14:31)   письмо автору
 
   для: f111   (01.09.2011 в 14:20)
 

Да, аналог, так как задействован ereg(), а не preg_match(), тут используются POSIX-регулярные выражения, а не Perl. У них немного синтаксис отличается.

  Ответить  
 
 автор: Саня   (01.09.2011 в 12:02)   письмо автору
 
   для: sivira   (01.09.2011 в 11:49)
 

.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования