Forum Webscript.Ru
Программирование => Регулярные выражения => Тема начата: Н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.
-
Нong
зачем позволять пользователю вводить числа в различном формате ?
Если по существу, то может попрбовать поэкспериментировать с началом/концом (^/$)строк:
$pattern = "/(^\\d+\\.*\\d+$|^\\d*\'\\d*\'*\\d*$|^\\d*\'\\d*$)/";
-
Если регулярное выражение все равно должно складывать такие кривые "числа" в массив, то может сделать проще: /(\\d+.*)/
Ну, а если нужно контролировать "правильность" введенных "чисел", то можно попробовать так: /((\\d+[\\.\',])+\\d*)/, хотя как ты будешь потом из такого пользовательского ввода действительно правильные числа получать мне непонятно.
-
Нong:
Но штобы к примеру получить такое число 46’760.0 мне приходится использовать:
$data=str_replace("\'", "", $data);
-
Привет.
Обьеснение:
Мы получили разрешение использовать на одной из нашых страниц актуалный курс валют различных банков, вот с этой странице:
http://www.oanda.com/convert/classic?lang=en
Я сделал точно такой же формуляр, толко после того как пользователь выбирает валюту в нашем формуляре и нажымает кнопку, происходит соединение с этой страницой. Нужную валюту я с помощью регулярных выражений вытаскиваю и показываю на нашей странице.
К примеру если перевести доллар в евро на их странице, то вывод будет таким:
1 US Dollar = 0.91988 Euro, мне нужно вывести на моей странице 0.91988 (также и к каждей валюте)
Проблема в том што валюта у них в разных форматах и стран болше ста, поетому мне бы не хотелось писать для каждой страны по регулярному выражению.
Теперь я думаю ситуация есна, проблема толко в рег. выр.
Cпаcибо.
Cu.
-
Больше помощи не надо я всё сделал. ;=)
Cu.