Например, если была эта строка:
what is 4+3
, или же, what is 3 * 2
, или же, what is 3x2
, или же, what is 4 times 2
Как это будет достигнуто? Можно ли создать такую систему сопоставления в регулярных выражениях?
Следующие образцы все совпадают.
$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);
});
Если ваши строки буквально What is <equation>
вы можете сделать это
What is (\d+ ?([^\s] ?\d+ ?))
Чтобы соответствовать уравнениям переменной длины (4 + 11 times 2
например), вы можете сделать это.
What is (\d+ ?([^\s] ?\d+ ?)+)
Результаты, которые вы хотите, находятся в группе захвата # 1.