Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Нужно извлечь цифры из формулы
 
 автор: Stackmann   (18.06.2012 в 14:03)   письмо автору
 
 

Приветствую всех.
Помогите составить паттерн. Имеется текстовая строка-формула, в которой присутствуют числа (как целые, так и дробные, как положительные так и отрицательные) и операции: "+", "-", "*", "/" и круглые скобки "(" и ")". Нужно извлечь из этой строки все числа с ихним знаком.
Примеры,
1. -17,2+5+3+-2 должно извлечь -17,2; 5; 3; -2
2. 8--2+12+78,55 должно извлечь 8; -2; 12; 78,55
3. (16-8)/(1,8+0,2) должно извлечь 16; 8; 1,8; 0,2
4. (-7+136,78)/10000 должно извлечь -7; 136,78; 10000

Сам написал такое: "[-\+\*\/\(](-?\d+(\,\d+)*)"
Однако оно не захватит положительное число в начале формулы (пример 2). Чтобы я не менял - постоянно что-то не захватит или захватит лишнее.
Заранее благодарен.

  Ответить  
 
 автор: Sfinks   (18.06.2012 в 23:44)   письмо автору
 
   для: Stackmann   (18.06.2012 в 14:03)
 

<?php
  $pattern 
'#((?<!\d)\-)?\d+(\,\d+)?#';

  
$s '-17,2+5+3+-2'//должно извлечь -17,2; 5; 3; -2
  
preg_match_all($pattern$s$out);
  
print_r($out[0]);
  
$s '8--2+12+78,55'//должно извлечь 8; -2; 12; 78,55
  
preg_match_all($pattern$s$out);
  
print_r($out[0]);
  
$s '(16-8)/(1,8+0,2)'//должно извлечь 16; 8; 1,8; 0,2
  
preg_match_all($pattern$s$out);
  
print_r($out[0]);
  
$s '(-7+136,78)/10000'//должно извлечь -7; 136,78; 10000
  
preg_match_all($pattern$s$out);
  
print_r($out[0]);
?>
Array(
    [0] => -17,2
    [1] => 5
    [2] => 3
    [3] => -2
)
Array(
    [0] => 8
    [1] => -2
    [2] => 12
    [3] => 78,55
)
Array(
    [0] => 16
    [1] => 8
    [2] => 1,8
    [3] => 0,2
)
Array(
    [0] => -7
    [1] => 136,78
    [2] => 10000
)

  Ответить  
 
 автор: Stackmann   (19.06.2012 в 15:45)   письмо автору
 
   для: Sfinks   (18.06.2012 в 23:44)
 

Гмм. Фокус не удался.
Прошу прощения, но я забыл указать, что я использую компонент RegExp из библиотеки VBScript.
Так вот там приемчик с "?<!" (я так понял это отрицательная проверка слева) не прокатывает.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования