Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

php regular expressions groups

Tags:

regex

php

I am new to php and regex, and I am facing a problem.

I have a text looks like this for example: "FIRST NAME: sdfksdfkjskdlfjlskdf MORE DATA: dsfkskldfjsdkfjsdkf EXTRA DATA: dsfksdfjlsdjfklsdf"

and I want to fecth three groups, one for FIRST NAME another for MORE DATA and a third one for EXTRA DATA. so this is my regex:

FIRST NAME:(.*)MORE DATA:(.*)EXTRA DATA:(.*)

this is how I do it in java.

but now, how do I match it with php so I can echo something like:

echo "more data: " . matche(group(1));

for example.

thank you!

EDIT: and what if I have it repeating it self? for example: FIRST NAME: sdfksdfkjskdlfjlskdf MORE DATA: dsfkskldfjsdkfjsdkf EXTRA DATA: dsfksdfjlsdjfklsdf FIRST NAME: sdfksdfkjskdlfjlskdf MORE DATA: dsfkskldfjsdkfjsdkf EXTRA DATA: dsfksdfjlsdjfklsdf how do I grap the groups in a while loop until it ends matching?

like image 360
dani jinji Avatar asked Oct 18 '25 03:10

dani jinji


1 Answers

Let's do it like this:

preg_match('/FIRST NAME:\s*(.*?)\s*MORE DATA:\s*(.*?)\s*EXTRA DATA:\s*(.*)\s*/', $line, $matches);

Your match results will now be in $matches, like this:

php > var_dump($matches);
array(4) {
  [0]=>
  string(93) "FIRST NAME: sdfksdfkjskdlfjlskdf MORE DATA: dsfkskldfjsdkfjsdkf EXTRA DATA: dsfksdfjlsdjfklsd"
  [1]=>
  string(20) "sdfksdfkjskdlfjlskdf"
  [2]=>
  string(19) "dsfkskldfjsdkfjsdkf"
  [3]=>
  string(17) "dsfksdfjlsdjfklsd"
}
php >

So now $matches[1] is the first group, and so on. [0] is the whole match result.

like image 91
Will Avatar answered Oct 20 '25 05:10

Will



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!