Home > Software engineering >  Simple regex on string
Simple regex on string

Time:11-21

I'm working on a simple mention system and in my PHP script and I need to extract client:6 from the larger text where one or more @mention like @[John Doe (#6)](client:6) will be present.

Ex. This is my text how do you like it @John and do you have any thoughts @Jane

In php the string will look like.

This is my text how do you like it @[John Doe (#6)](client:6) and do you have any thoughts @[Jane Doe (#7)](client:7)

and i need to get an array with array('client:6','client:7')

CodePudding user response:

One of many possible ways would be

@\[[^][] \]\s*\(\K[^()] 

See a demo on regex101.com.


In terms of regular expressions, this boils down to

@          # "@" literally
\[         # "[" literally
[^][]      # not "[" nor "]" as many times as possible
\]\s*      # followed by "]" literally   whitespaces, eventually
\(         # you name it - "(" literally
\K         # forget all what has been matched that far
[^()]      # not "(" nor ")"

In PHP this could be

<?php

$data = "This is my text how do you like it @[John Doe (#6)](client:6) and do you have any thoughts @[Jane Doe (#7)](client:7)";

$regex = "~@\[[^][] \]\s*\(\K[^()] ~";

preg_match_all($regex, $data, $matches);

print_r($matches);

?>

And would yield

Array
(
    [0] => Array
        (
            [0] => client:6
            [1] => client:7
        )

)

See a demo on ideone.com.

CodePudding user response:

\w :\d should work.

In the sentence :

This is my text how do you like it @John Doe (#6) and do you have any thoughts @Jane Doe (#7)

It should find client:6 and client:7 .

You can try your regex live using https://regexr.com/ for example.

  • Related