Регулярка для любого символа - C#
Формулировка задачи:
как обозначить что может быть любой символ?
Решение задачи: «Регулярка для любого символа»
textual
Листинг программы
$str = '12 + 2.5 * (3 - 4 * (3 - 1) ) - sin( 0.1 * ( 8 - 7 ) ) + 5 * (6 ^ 2 + 7) + sin(0)';
$result = array();
f($str, $result);
print_r($result);
function f($str, &$r) {
preg_replace_callback(
'@
( \d+(?:\.\d+)?
| [-+*^]
| (?:sin|cos)
| \( ([^()]+ | (?1) )*+ \)
)
@x',
function ($m) use(&$r) {
if (isset($m[2])) {
// если найдено выражение в скобках
// отрезаем скобки и парсим снова
$a = array();
f(substr($m[0], 1, -1), $a);
$r[] = $a;
} else {
// если найден обычный элемент
// просто добавляем его к результату
$r[] = $m[0];
}
}, $str);
}