Ik breek mijn hoofd nu al TE lang gewoon over reguliere expressies in PHP.
Patroon:
Te matchen tekst:
Wat ik wil is het volgende:
De kolommen mét tabel prefix en de tabellen met evt aliassen (en evt as)
PHP kan deze reguliere expressie niet goed aan op de een of andere manier en krijg ik dit als resultaat:
Echter, als ik "The Regulator" gebruik, die ontwikkeld is in .NET krijg ik precies wat ik verwacht van de reguliere expressie waarbij array 2, 3, 5 en 6 het volgende bevat:
Dus, wat is er mis met mijn regex zodat ik het beoogde resultaat krijg? Ik ben HOPELOOS!
Patroon:
code:
1
| ^select\s((?:,?\s*(?:(\w+)\.(\w+)))*)\s+from((?:,?\s*(\w+)(?:\s+(?:as\s+)?(\w+))?)*) |
Te matchen tekst:
code:
1
| select tbc1.col1, tbc1.col2, tbc2.col1 from table1, table2 t2, table3 as t3 |
Wat ik wil is het volgende:
De kolommen mét tabel prefix en de tabellen met evt aliassen (en evt as)
PHP kan deze reguliere expressie niet goed aan op de een of andere manier en krijg ik dit als resultaat:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
| Array ( [0] => Array ( [0] => select tbc1.col1, tbc1.col2, tbc2.col1 from table1, table2 t2, table3 as t3 ) [1] => Array ( [0] => tbc1.col1, tbc1.col2, tbc2.col1 ) [2] => Array ( [0] => tbc2 ) [3] => Array ( [0] => col1 ) [4] => Array ( [0] => table1, table2 t2, table3 as t3 ) [5] => Array ( [0] => table3 ) [6] => Array ( [0] => t3 ) ) |
Echter, als ik "The Regulator" gebruik, die ontwikkeld is in .NET krijg ik precies wat ik verwacht van de reguliere expressie waarbij array 2, 3, 5 en 6 het volgende bevat:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| [2] => Array ( [0] => tbc1 [1] => tbc1 [2] => tbc2 ) [3] => Array ( [0] => col1 [1] => col2 [2] => col1 ) [5] => Array ( [0] => table1 [1] => table2 [2] => table3 ) [6] => Array ( [0] => t2 [1] => t3 ) |
Dus, wat is er mis met mijn regex zodat ik het beoogde resultaat krijg? Ik ben HOPELOOS!
321X