Skip to content
Advertisement

preg_match string from meta name

I want to preg_match number “20,956” from $url1 and number “2,894,865” from $url2

$url1:

<meta name="description" content="‎ST. Eye Clinic - عيادة دكتور محمد عزب لطب و جراحة العيون‎, Dumyat Al Jadidah, Dumyat, Egypt. 20,956 visits ·

$url2:

<meta name="description" content="ABC. 2,894,865 visits ·

Tried this to work for both of urls, it works for only $url1 but not in $url2

$p = preg_match("'Egypt. (.*?) visits'si", $url, $matches);
$p2 = preg_replace("/[^0-9]/", "", $matches[1]);      
print $p2;

Any Idea to make it work for both $url1&2?

Advertisement

Answer

You can use

if (preg_match('~d[,d]*(?=s*visits)~', $url, $matches)) {
  echo $matches[0];
}

See the regex demo. Details:

  • d – a digit
  • [,d]* – zero or more commas/digits
  • (?=s*visits) – a positive lookahead that requires zero or more whitespaces and then visits string immediately to the right of the current location.

See a PHP demo:

$urls = ['<meta name="description" content="‎ST. Eye Clinic - عيادة دكتور محمد عزب لطب و جراحة العيون‎, Dumyat Al Jadidah, Dumyat, Egypt. 20,956 visits ·',
    '<meta name="description" content="ABC. 2,894,865 visits ·'];
foreach ($urls as $url) {
  if (preg_match('~d[,d]*(?=s*visits)~', $url, $matches)) {
    echo $matches[0] . PHP_EOL;
  }
}

Output:

20,956
2,894,865
User contributions licensed under: CC BY-SA
1 People found this is helpful
Advertisement