regexp для поиска строки вида "1 USD 5.3318"

SA739

Cogito, ergo sum
re

доброго времени суток,

PHP:
preg_match_all("/1(0?)\s+[a-zA-Z]{,3}\s+\d\.\d{1,5}\s+/", $buf, $matches);
не находит строку вида
где я туплю? ткните пожалуйста носом..
заранее благодарен.
 

Sir_J

Guest
Попробуй так

preg_match_all("/1(0?)\s+[a-zA-Z]{3,}\s+\d\.\d{1,5}\s*/", $buf, $matches);
 

pupkin

Guest
Лажа прёт в том, что в первом \d не указываешь кол-во этих самых \d
 

Sir_J

Guest
to Pupkin
нет. здесь как раз таки все честно ,ИМХО.
 

SA739

Cogito, ergo sum
to pupkin
первый цифровой символ всегда в единичном экземпляре..
где здесь лажа?

to Sir_J
таже фигня, возвращается массив вида: array(2) { [0]=> array(0) { } [1]=> array(0) { } }

может лажа из-за   :
1 USD
   
5.3318 
?

:rolleyes: что-то я совсем туплю..
 

Sir_J

Guest
Смотри сам.
$buf="1 USD 5.3318";
preg_match_all("/1(0?)\s+[a-zA-Z]{3,}\s+\d\.\d{1,5}\s*/", $buf, $matches);
print_r($matches);
Выдает
Array ( [0] => Array ( [0] => 1 USD 5.3318 ) [1] => Array ( [0] => ) )
 

pupkin

Guest
Извиняюсь.. плохо рассмотрел твой пример..

Тогда всё должно работать..
Дело в кривости рук.. имхо

ЗЫ А вдруг не одна цифра?
 

SA739

Cogito, ergo sum
1 USD
\ \ \ 
5.3318\ 
так выглядет соурс искомого участка, переписал рег:
PHP:
preg_match_all("/1(0?)\s*[a-zA-Z]{,3}\r\n\s*\r\n\d\.\d{1,5}\s*/", $buf, $matches);
всеравно не находит :(
 

SA739

Cogito, ergo sum
поотрубал все \r\n

в строке:"... Курсы валют на 11/08/2003 1 USD 5.3318 1 EUR 6.0387 10 RUR 1.754 Реклама ... "
рег
PHP:
"/(1(0?)\s*[a-zA-Z]{3,}\s*\d\.\d{1,5})/"
работает..

если же я ему подсовываю весь "мусор" .. - от ворот поворот.

народ, кто поопытней, подскажите в чем грабли у меня?
 

Profic

just Profic (PHP5 BetaTeam)
\s включает в себя и \r и \n, блин RTFM
PHP:
$buf='1 USD
   
5.3318

bla-bla-bla

1 DEM
   
6.1553';
preg_match_all('~10?\s+\w{3,}\s+\d\.\d{1,5}~', $buf, $matches);
print_r($matches);
Дает:
Код:
Array
(
    [0] => Array
        (
            [0] => 1 USD

5.3318
            [1] => 1 DEM

6.1553
        )

)
 

Sir_J

Guest
Смотри
$buf=":... Курсы валют на 11/08/2003 1 USD 5.3318 1 EUR 6.0387 10 RUR 1.754 Реклама ... ";
preg_match_all("\w+/1(0?)\s+[a-zA-Z]{3,}\s+\d\.\d{1,5}\s*/", $buf, $matches);
print_r($matches);
Выдает
Array ( [0] => Array ( [0] => 1 USD 5.3318 [1] => 1 EUR 6.0387 [2] => 10 RUR 1.754 ) [1] => Array ( [0] => [1] => [2] => 0 ) )
 

SA739

Cogito, ergo sum
вывел в браузер <pre>var_dump($buf)</pre>

скопировал в код искомую часть... все замечательно нашлось.

но вот отсюда:
PHP:
while(!feof($fp)) $buf .= fread($fp,2048);
$buf = strip_tags($buf);
ничего не находит.. чертовщина какая-то :mad:
 

Sir_J

Guest
По моему все дело в твоих ЗАМЕЧАТЕЛЬНЫХ руках :)
 

Profic

just Profic (PHP5 BetaTeam)
а это как понимать?
1 USD
&amp;nbsp;&amp;nbsp;&amp;nbsp;
5.3318&amp;nbsp;

Такого условии не было :)
 

SA739

Cogito, ergo sum
вывод "мусора",
сам рег (внизу) и массив с найденными совпадениями..
 

Profic

just Profic (PHP5 BetaTeam)
Вот тебе рег, только просьба скопировать его ПОЛНОСТЬЮ
'~10?(?:\s|&amp;nbsp;)+\w{3,}(?:\s|&amp;nbsp;)+\d\.\d{1,5}~'
 
Сверху