Регулярные выражения

Fuz

Новичок
Регулярные выражения

Блин. куда-то делась моя тема.
Нужно из строки достать все номера типа 8-918-444-21-29.
делаю след.образом:
PHP:
<?php 
$a='8-918-444-21-29';
//Print 'Исходная строка - '.$a;
Print '<hr>';

$x=eregi('(8\-|)[0-9]{3}\-[0-9]{2,4}\-[0-9]{2,4}(\-[0-9]{2,4}|)',$a,$arr);

Print $arr[0].'<br>';
Print '<hr>';
foreach ($arr as $value)
{
  Print $value.'<br>';
}
 ?>
Результат - пусто. В логах ошибка eregi(): REG_EMPTY:
Самое главное - дефалтовый пример тоже отказывается работать:
PHP:
<?php 
$a='cat';
Print 'Исходная строка - '.$a;
Print '<hr>';
$x=eregi("cat(aract|erpillar|)",$a,$arr);
Print $arr[0].'<br>';
Print '<hr>';
foreach ($arr as $value)
{
  Print $value.'<br>';
}
 ?>
 

ksnk

прохожий
imho - глюк. Такое ощущение, что ereg'у не нравится комбинация |) в регулярном выражении. Можно порекомендовать пользоваться PCRE функциями. В частности
PHP:
$x=preg_match("/cat(aract|erpillar|)/i",$a,$arr);
исправно работает.
 

Fuz

Новичок
Дефолтовый пример - по-тому как скопирован из мануала chm скачанного с php.net. я тоже думаю, что дело в |. Вечером проверю...
 

tolik777

Новичок
У
У меня проблема с модификатором x (пропуск пробелов).
Исходный Код:
PHP:
$url = "http://wm.exchanger.ru/asp/XMLWMList.asp?exchtype=1";
  $content = file_get_contents($url);
  $pattern = '|<query id=\"([^\"]+)\"[\s]amountin=\"([^\"]+)\"[\s]amountout=\"([^\"]+)\"[\s]inoutrate=\"([^\"]+)\"|';
  preg_match_all($pattern, $content, $out);
  print_r($out);
Т.к. строка в регулярном будет очень длинная, то делаю такой код, чтобы было более читабельное:

PHP:
$url = "http://wm.exchanger.ru/asp/XMLWMList.asp?exchtype=1";
  $content = file_get_contents($url);
  $pattern = '|<query id=\"([^\"]+)\"[\s]
amountin=\"([^\"]+)\"[\s]
amountout=\"([^\"]+)\"[\s]
inoutrate=\"([^\"]+)\"|x';
  preg_match_all($pattern, $content, $out);
  print_r($out);
Но на выходе пусто получется.
Впринципе проблема не столь серьезная, но просто интересно почему так. Даже на 1-ый вариант кода сталвлю модификатор x и нигде нет ни одного пробела, уже выдается пустой массив.
 
Сверху