Forum Webscript.Ru

Программирование => Регулярные выражения => Тема начата: Нong от 26 Августа 2003, 02:19:39

Название: Регулярные выражения??? <Help>
Отправлено: Нong от 26 Августа 2003, 02:19:39
Привет всем.

У меня вопрос по регулярным выражениям.

Есть разные числа примерно такого формата, которые я  считываю из файла, в зависемости от того што ввел ползователь в форму.

(запятые могут быть и апострофами -> \' )
9,202.17
46,760.0
567,875.0

1,415,426
82,710,000
153,885,115

0.71360
92.02172
126.110

Для части етого кода я использовал:
$pattern = "/(\\d+\\.*\\d+|\\d*\\\'\\d*\\\'*\\d*|\\d*\\\'\\d*)/";
preg_match_all($pattern, $file, $vivod)
print_r($vivod);
// возможный вывод
echo $var = $vivod[0][0];

У меня никак неполучается изменить ето регулярное выражение так, штобы без всяких if-цыклов можно было найти в тексте правилное число. Вывод должен быть всегда равен одному масиву к примеру:

echo $var = $vivod[0][0];
Всё должно происходить в одном регулярном выражение (возможно ли ето вообше)?

Етой частью кода $pattern = "/(\\d+\\.*\\d+|\\d*\\\'\\d*\\\'*\\d*)/";
я могу находить к примеру числа такого формата:
1.0872
10.87200
108.720
или за счет соединения с  |\\d*\\\'\\d*\\\'*\\d*

Но штобы к примеру получить такое число 46’760.0 мне приходится использовать:
$pattern ="/\\d*\\\'\\d*/";
Если я добавляю ету часть кода как третие соединение то получаю толко первые два числа до запятой или апострофы или даже ничего, т.к первые два выражения перехватывают значение.

Если кто силён в рег. выражениях помагите пожалуйста.

Cпасибо.
Cu.
Название: Регулярные выражения??? <Help>
Отправлено: Макс от 26 Августа 2003, 03:36:15
Нong
зачем позволять пользователю вводить числа в различном формате ?

Если по существу, то может попрбовать поэкспериментировать с началом/концом (^/$)строк:
$pattern = "/(^\\d+\\.*\\d+$|^\\d*\'\\d*\'*\\d*$|^\\d*\'\\d*$)/";
Название: Регулярные выражения??? <Help>
Отправлено: Bublic от 26 Августа 2003, 09:31:24
Если регулярное выражение все равно должно складывать такие кривые "числа" в массив, то может сделать проще: /(\\d+.*)/
Ну, а если нужно контролировать "правильность" введенных "чисел", то можно попробовать так: /((\\d+[\\.\',])+\\d*)/, хотя как ты будешь потом из такого пользовательского ввода действительно правильные числа получать мне непонятно.
Название: Регулярные выражения??? <Help>
Отправлено: Alexandr от 26 Августа 2003, 12:19:49
Цитировать
Нong:
Но штобы к примеру получить такое число 46’760.0 мне приходится использовать:

$data=str_replace("\'", "", $data);
Название: Регулярные выражения??? <Help>
Отправлено: Hong от 26 Августа 2003, 12:49:05
Привет.

Обьеснение:

Мы получили разрешение использовать на одной из нашых страниц актуалный курс валют различных банков, вот с этой странице:
http://www.oanda.com/convert/classic?lang=en

Я сделал точно такой же формуляр, толко после того как пользователь выбирает валюту в нашем формуляре и нажымает кнопку, происходит соединение с этой страницой. Нужную валюту я с помощью регулярных выражений вытаскиваю и показываю на нашей странице.
К примеру если перевести доллар в евро на их странице, то вывод будет таким:
1 US Dollar = 0.91988 Euro, мне нужно вывести на моей странице 0.91988 (также и к каждей валюте)
Проблема в том што валюта у них в разных форматах и стран болше ста, поетому мне бы не хотелось писать для каждой страны по регулярному выражению.

Теперь я думаю ситуация есна, проблема толко в рег. выр.

Cпаcибо.
Cu.
Название: Регулярные выражения??? <Help>
Отправлено: Нong от 27 Августа 2003, 02:28:43
Больше помощи не надо я всё сделал. ;=)

Cu.