Home > Software design >  How to use preg_match in php
How to use preg_match in php

Time:11-30

Am getting a response that looks like this:

{Delta=[r3, r4], X=alarmOff, Y=heatOn}

and using the preg_match I want filter out all the other a left on matches with r3r4

preg_match('/^{Delta=(\[.*\, .*\])}$/', $response[0], $matches)

am thinking something like this but am facing problems.

CodePudding user response:

use regex101 to test the regex.

in your code, if you drop off the closing brace and $ the match works and returns the text enclosed in square brackets.

$matchText = '' ;
$isMatch = preg_match('/^{Delta=(\[.*\])/', $response[0], $matches)
if ( $isMatch )
{
  $matchText = $matches[1] ;
  echo "got match: $matchText \n";
}

CodePudding user response:

Please try:

  $pattern = "/^{Delta=\[(.*)\](.*)$/";
    $response[0] = "/^{Delta=\[(.*)\](.*)$/";
    preg_match($pattern, $response[0], $matches);
    print_r($matches[1]);

CodePudding user response:

You can use a negated character class [^ to rule out the characters that are not allowed to match:

{Delta=(\[[^][,]*,[^][]*])[^{}]*}
  • {Delta= Match literally
  • ( Capture group 1
    • \[ Match [
    • [^][,]*, Match 0 times any char other than [ ] , and then match the ,
    • [^][]* Optionally match any char except [ and ]
    • ] Match ]
  • ) Close group 1
  • [^{}]* Match 0 times any char other than { and }
  • } Match }

Regex demo | PHP demo

Example printing the group 1 value:

$re = '/{Delta=(\[[^][,]*,[^][]*])[^{}]*}/';
$str = '{Delta=[r3, r4], X=alarmOff, Y=heatOn}';

preg_match($re, $str, $matches);

print_r($matches[1]);

Output

[r3, r4]

To get the separate matches for r3 and r4 you can use 2 capture groups:

 {Delta=\[([^][,]*),\h*([^][]*)][^{}]*}

Regex demo

  • Related