Регулярное выражение для сопоставления простого математического уравнения в строке

Например, если была эта строка:

what is 4+3, или же, what is 3 * 2, или же, what is 3x2, или же, what is 4 times 2Как это будет достигнуто? Можно ли создать такую ​​систему сопоставления в регулярных выражениях?

0

Решение

Следующие образцы все совпадают.

$samples = Array(
'what is 4+3',
'what is 2 plus 7',
'what is 3 * 2',
'what is 3x2',
'what is 4 times 2'
);

foreach($samples as $sample) {
$sample = preg_replace('/(times)|\*/', 'x', $sample);
$sample = str_replace('plus', '+', $sample);
preg_match('/what is \d ?[+x] ?\d/', $sample, $matches);
var_dump($matches[0]);
}

Немного приятнее в JavaScript. Просто в том числе это для удовольствия.

var samples = [
'what is 4+3',
'what is 2 plus 7',
'what is 3 * 2',
'what is 3x2',
'what is 4 times 2'
];

samples.forEach(function(sample) {
sample = sample
.replace(/(times)|\*/, 'x')
.replace('plus', '+')
;
var match = sample.match(/what is \d ?[+x] ?\d/);
console.log(match);
});
2

Другие решения

Если ваши строки буквально What is <equation> вы можете сделать это

What is (\d+ ?([^\s] ?\d+ ?))

Чтобы соответствовать уравнениям переменной длины (4 + 11 times 2 например), вы можете сделать это.

What is (\d+ ?([^\s] ?\d+ ?)+)

Результаты, которые вы хотите, находятся в группе захвата # 1.

2

По вопросам рекламы [email protected]