|
|
|
| Приветствую всех.
Помогите составить паттерн. Имеется текстовая строка-формула, в которой присутствуют числа (как целые, так и дробные, как положительные так и отрицательные) и операции: "+", "-", "*", "/" и круглые скобки "(" и ")". Нужно извлечь из этой строки все числа с ихним знаком.
Примеры,
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). Чтобы я не менял - постоянно что-то не захватит или захватит лишнее.
Заранее благодарен. | |
|
|
|
|
|
|
|
для: 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
)
|
| |
|
|
|
|
|
|
|
для: Sfinks
(18.06.2012 в 23:44)
| | Гмм. Фокус не удался.
Прошу прощения, но я забыл указать, что я использую компонент RegExp из библиотеки VBScript.
Так вот там приемчик с "?<!" (я так понял это отрицательная проверка слева) не прокатывает. | |
|
|
|