Morgan » 2010.08.03 20:29

Код:

1
span style="color: #0000BB"><?php$content = '{if $a}{if $b}{/if}{/if}';preg_match_all('~\{if (\!)?(\~)?\$((.*)(\.(.*))?)( (.*) ([0-9]+|\$((.*)(\.(.*))?)))?\}(?:\r\n|\n)?(.*)(?:\r\n|\n)?\{\/if\}~uUs', $content, $ifs);print_r($ifs);?>

выдает одно найденное значение с содержимым ($ifs[0][0])

Код:

1
2
3
4
{if $a}
{if $b}
 
{/if}

хотя должно быть два найденных значения, типа

Код:

1
2
3
4
5
6
7
$ifs[0][0] =>
{if $b}
 
{/if}
$ifs[1][0] => {if $a}
 
{/if}

уже замучался я с это регуляркой  :| , прошу помощи

Morgan » 2010.08.03 21:02

решил пока таким способом

Код:

1
span style="color: #0000BB"><?phppreg_match_all('~\{if (\!)?(\~)?\$((.*)(\.(.*))?)( (.*) ([0-9]+|\$((.*)(\.(.*))?)))?\}(?:\r\n|\n)?(.*)(?:\r\n|\n)?\{\/if\}~uUs', $template_content, $ifs, PREG_SET_ORDER);?>

но все таки, регулярка может составлена не совсем точно?

Morgan » 2010.08.03 22:15

пробовал сделать так

Код:

1
span style="color: #0000BB"><?php$content = '{if $a}{if $b}{/if $b}{/if $a}';preg_match_all('~\{if ((\!)?(\~)?\$((.*)(\.(.*))?)( (.*) ([0-9]+|\$((.*)(\.(.*))?)))?)\}(?:\r\n|\n)?(.*)(?:\r\n|\n)?\{\/if \\1\}~uUs', $content, $ifs);print_r($ifs);?>

===>>>

Код:

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
Array
(
[0] => Array
(
[0] => {if $a}
{if $b}
 
{/if $b}
 
{/if $a}
)
 
[1] => Array
(
[0] => $a
)
 
[2] => Array
(
[0] =>
)
 
[3] => Array
(
[0] =>
)
 
[4] => Array
(
[0] => a
)
 
[5] => Array
(
[0] => a
)
 
[6] => Array
(
[0] =>
)
 
[7] => Array
(
[0] =>
)
 
[8] => Array
(
[0] =>
)
 
[9] => Array
(
[0] =>
)
 
[10] => Array
(
[0] =>
)
 
[11] => Array
(
[0] =>
)
 
[12] => Array
(
[0] =>
)
 
[13] => Array
(
[0] =>
)
 
[14] => Array
(
[0] =>
)
 
[15] => Array
(
[0] =>
{if $b}
 
{/if $b}
 
)
 
)

то есть, первое вхождение найдено а второе нет

Morgan » 2010.08.04 00:01

решено с помощью создания функции для рекурсивного прохода по всем таким вложенностям.

Gemorroj » 2010.08.04 10:21

=))
разбирая такую регулярку можно мозг сломать)

Morgan » 2010.08.06 22:56

вам это ~21 числа разбирать предстоит :)

Gemorroj » 2010.08.07 11:54

удачи в конкурсе ;)

Morgan » 2010.08.07 15:23

спасибо