Regex wil niet werken
Ik zit al een tijdje te zoeken naar een oplossing voor mijn probleem, maar het wil maar niet lukken.
Ik heb namelijk volgende string:
Nu wil ik via RegEx (reg_split) het volgende bekomen:
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!
Misschien wat te ingewikkeld maar, dit werkt:
Code (php)
1
2
3
4
5
6
7
8
9
10
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 )
?>
$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 )
?>
Code (php)
1
2
3
4
5
6
7
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]);
?>
$str = "required|equals[1|2|3|4|5]|trim";
preg_match_all('/[^\[\|]+(\[.+?\])?/', $str, $matches);
print_r($matches[0]);
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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]
)
)
(
[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?
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)
1
2
3
4
5
6
7
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]);
?>
$str = "required|equals[1|2|3|4|5]|trim";
preg_match_all('/[^\[\|]+(?:\[.+?\])?/', $str, $matches);
print_r($matches[0]);
?>
Ok, hartelijk dank voor het verduidelijken. Ben namelijk geen krak op het gebied van RegEx.