I suggest
'/(\d+)\s*([\p{Pd}xх]|na|на)\s*(\d+)/u'
See the demo expressions.
(\d+) - Group 1: one or more digits\s* - 0+ whitespace characters([\p{Pd}xх]|na|на) are different hyphens ( \p{Pd} ), x , х , na or\s* - 0+ whitespace characters(\d+) - Group 3: one or more digits
If the numbers can be fractional, you can add (?:[.,]\d+)? after \d+ :
/(\d+(?:[.,]\d+)?)\s*([\p{Pd}xх]|na|на)\s*(\d+(?:[.,]\d+)?)/u
PHP:
$re = '/(\d+)\s*([\p{Pd}xх]|na|на)\s*(\d+)/u'; $str = '100 на 60, 100 руб'; preg_match_all($re, $str, $matches, PREG_SET_ORDER); foreach ($matches as $m) { echo $m[1] . ", " . $m[2] . ", " . $m[3] . "\n"; } // => 100, на, 60
|put? This is OR. So it chooses. Try to use regexr.com for example. helps) - Moonvvell