motioz
motioz

Reputation: 662

Php preg_match issue not working

I am trying to find a php preg_match that can match:

"2-20 to 2-25"

from this text:

user levels 2-20 to 2-25 not ready

I tried

preg_match("/([0-9]+) to ([0-9]+)/", $vars[1] , $matchesto);

but the result is:

"20 to 2"

Any help appreciated.

Upvotes: 1

Views: 208

Answers (3)

l'L'l
l'L'l

Reputation: 47302

Your pattern is almost correct; just include the dashes and adjust the capture group:

([-0-9]+ to [-0-9]+)

Example:

https://regex101.com/r/eD6lQ2/1

Upvotes: 1

user4035
user4035

Reputation: 23769

You can use "\d" to match the digits:

<?php
$str = 'user levels 2-20 to 2-25 not ready';
$matches = array();
preg_match('/(\d+-\d+) to (\d+-\d+)/', $str, $matches);
var_dump($matches);

Output:

array(3) {
  [0]=>
  string(12) "2-20 to 2-25"
  [1]=>
  string(4) "2-20"
  [2]=>
  string(4) "2-25"
}

Upvotes: 0

Forien
Forien

Reputation: 2763

Thats because [0-9]+ matches one or more numbers but won't match a hyphen (-).

Try this:

$pattern = '~([0-9]+-[0-9]+) to ([0-9]+-[0-9]+)~Ui';
preg_match($pattern, $vars[1] , $matchesto);

Upvotes: 0

Related Questions