Regex wil niet werken

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ruben Portier

Ruben Portier

09/02/2014 19:31:21
Quote Anchor link
Beste

Ik zit al een tijdje te zoeken naar een oplossing voor mijn probleem, maar het wil maar niet lukken.

Ik heb namelijk volgende string:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$str = "required|equals[1|2|3|4|5]|trim";


Nu wil ik via RegEx (reg_split) het volgende bekomen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
Array(
  'required',
  'equals[1|2|3|4|5]',
  'trim'
)


Is er iemand die mij hierbij kan helpen. Het lukt me namelijk niet om de hetgeen die tussen de [ ] staat bij equals (het woord equals kan ook veranderen) te behouden. Ik hoop dat iemand mij hier kan helpen met mijn probleem.

Alvast hartelijk dank!
 
PHP hulp

PHP hulp

05/11/2024 11:30:32
 
Martijn B

Martijn B

09/02/2014 21:26:50
Quote Anchor link
Hoi,

Misschien wat te ingewikkeld maar, dit werkt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php

$str
= "required|equals[1|2|3|4|5]|trim";

preg_match_all( '/([^\|]*\[[^\]]+]|[^\|]*)\|/', $str . '|', $match );

print_r($match[1]);
//Array ( [0] => required [1] => equals[1|2|3|4|5] [2] => trim )

?>
 
Wouter J

Wouter J

09/02/2014 21:35:33
Quote Anchor link
Jouw regex kan dan weer veel simpeler:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$str
= "required|equals[1|2|3|4|5]|trim";

preg_match_all('/[^\[\|]+(\[.+?\])?/', $str, $matches);

print_r($matches[0]);
?>
 
Ruben Portier

Ruben Portier

09/02/2014 22:36:49
Quote Anchor link
Hartelijk dank voor de goede reacties! Alleen krijg ik nu volgende terug:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Array
(
    [0] => Array
        (
            [0] => required
            [1] => equals[0|1]
        )

    [1] => Array
        (
            [0] =>
            [1] => [0|1]
        )

)


Waarom krijg ik die array met key index 1 ook nog eens terug?
 
Wouter J

Wouter J

09/02/2014 22:46:01
Quote Anchor link
Merk op dat we veranderd zijn van splitten op bepaalde characters naar matchen van de rest.

Index 0 bevat de complete match van de rest, index 1 bevat de eerste captured group (stuk tussen haakjspes in de pattern). Je kan ook dit doen, dan heb je alleen een array met index 0:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$str
= "required|equals[1|2|3|4|5]|trim";

preg_match_all('/[^\[\|]+(?:\[.+?\])?/', $str, $matches);

print_r($matches[0]);
?>
 
Ruben Portier

Ruben Portier

09/02/2014 22:52:28
Quote Anchor link
Ok, hartelijk dank voor het verduidelijken. Ben namelijk geen krak op het gebied van RegEx.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.