2010-09-02 5 views
0

Я пытаюсь использовать PHP preg_math разобрать строку, которая выглядит как:с помощью PHP preg_match

6.15608128 Norwegian kroner 

Я просто хочу, первую часть (цифры), а не текст. Я написал простое регулярное выражение, как

[0-9\.]+ 

, что отлично работает в регулярных выражениях тестеров, но PHP жалуется на «+». Может ли кто-нибудь помочь мне написать это регулярное выражение, чтобы оно было действительным для функции preg_match? Я пробовал массу разных идей, но я не слишком хорошо разбираюсь в регулярном выражении.

Спасибо за любые советы.

+0

Полный код пожалуйста. – kennytm

+1

Что вы подразумеваете под «PHP жалуется на +»? Что он говорит? – BoltClock

+0

Вам не нужно избегать точки, когда она находится внутри класса символов. – Aillyn

ответ

5

The regex works fine. Вам не хватает delimiters? Функция должна быть использована, как это:

preg_match('/[0-9\.]+/', $string, $result); 

(.. Кстати, вам не нужно, чтобы избежать . внутри класса символов [0-9.] достаточно)

+0

Большое спасибо, Кенни, ты прав, мне не хватало разделителей. – julio

+0

Как вы, возможно, догадались, я возился с API конверсии валют Google. Вопрос заключается в том, что они довольно нестандартном с их данными, это не соответствует действительности JSON и т.д. Некоторые валютные курсы имеют пробелы, а не запятые или другие separators-- например: 1 811.5942 колумбийских песо Есть способ изменить это регулярное выражение, чтобы включить это пространство? Опять же, в обычном регулярном выражении вы просто добавляете пробел после точки ([0-9 \.]), Но это не работает в PHP. Еще раз спасибо. – julio

+0

@julio: '[0-9. ] 'должен работать (но это будет включать пространство до 'Columbian'). Если нет, попробуйте '[0-9. \ S]'. Если проблема связана с дополнительным пространством, попробуйте '[\ d \ s] + \. \ D +'. – kennytm

3

Не имея фактический код, вот некоторые код, который действительно работает:

$string = "6.15608128 Norwegian kroner"; 
preg_match('#[0-9\.]+#', $string, $matches); 

print_r($matches); 

/* Outputs: 

    Array 
    (
     [0] => 6.15608128 
    ) 
*/ 

# знаки являются разделителями. Дополнительные сведения о регулярном выражении с php см. В разделе this article.

1

Вы включаете свой узор в косые черты?

preg_match('/[0-9\.]+/', $string, $matches);

+1

Это не * есть *, чтобы быть косой чертой, просто должен быть действительным разделителем, как fyi :) –

+0

Neato - не знал этого. – sholsapp

1

Попробуйте это:

$s = '6.15608128 Norwegian kroner'; 

preg_match('/[0-9]*\.[0-9]*/', $s, $matches); 
var_dump($matches);