preg_match_all

preg_match_all -- Perform a global regular expression match

Description

int preg_match_all ( string pattern, string subject, array matches [, int order])

Searches subject for all matches to the regular expression given in pattern and puts them in matches in the order specified by order .

order can be one of two things :

PREG_PATTERN_ORDER

 
preg_match_all

 
(

 
"

 
|

 
[^

 
]

 
+

 
(.*

 
)

 
/

 
[^

 
]

 
+

 
|U"

 
,

 
"

 
b

 
example

 
:

 
/

 
b

 
div

 
align=left

 
this

 
is

 
a

 
test

 
/

 
div

 
"

 
,

 
$out

 
,

 
PREG_PATTERN_ORDER)

 
;

 
print

 
$out[0][0]

 
."

 
,

 
".$out[0][1]

 
."\n"

 
;

 
print

 
$out[1][0]

 
."

 
,

 
".$out[1][1]

 
."\n"

 
;






So, $out[0] contains array of strings that matched full pattern, and $out[1] contains array of strings enclosed by tags.



PREG_SET_ORDER

 
preg_match_all

 
(

 
"

 
|

 
[^

 
]

 
+

 
(.*

 
)

 
/

 
[^

 
]

 
+

 
|U"

 
,

 
"

 
b

 
example

 
:

 
/

 
b

 
div

 
align=left

 
this

 
is

 
a

 
test

 
/

 
div

 
"

 
,

 
$out

 
,

 
PREG_SET_ORDER)

 
;

 
print

 
$out[0][0]

 
."

 
,

 
".$out[0][1]

 
."\n"

 
;

 
print

 
$out[1][0]

 
."

 
,

 
".$out[1][1]

 
."\n"

 
;



This example will produce: In this case, $matches[0] is the first set of matches, and $matches[0][0] has text matched by full pattern, $matches[0][1] has text matched by first subpattern and so on. Similarly, $matches[1] is the second set of matches, etc.



If order is not specified , it is assumed to be PREG_PATTERN_ORDER .

דוגמה 1 .

 
preg_match_all

 
(

 
"

 
/

 
\(

 
?

 
(\d{3})

 
?

 
\)

 
?

 
(

 
?(1

 
)

 
[\-\s

 
]

 
)

 
\d{3}-\d{4}

 
/

 
x"

 
,

 
"Call

 
555-1212

 
or

 
1-800-555-1212"

 
,

 
$phones)

 
;





דוגמה 2 .

 
/

 
/

 
The

 
\\2

 
is

 
an

 
example

 
of

 
backreferencing

 
.








 
The

 
extra

 
backslash

 
is

 
/

 
/

 
required

 
because

 
the

 
string

 
is

 
in

 
double

 
quotes

 
.

 
$html

 
=

 
"

 
b

 
bold

 
text

 
/

 
b

 
a

 
href=howdy.html

 
click

 
me

 
/

 
a

 
;

 
preg_match_all

 
("

 
/

 
(

 
([\w]+)[^

 
]*

 
)(.*)

 
(

 
\

 
/

 
\\2

 
)

 
/

 
"

 
,

 
$html

 
,

 
$matches)

 
;

 
for

 
($i=0

 
;

 
$i

 
count($matches[0])

 
;

 
$i++

 
)

 
{

 
echo

 
"matched

 
:

 
".$matches[0][$i]

 
."\n"

 
;

 
echo

 
"part

 
1

 
:

 
".$matches[1][$i]

 
."\n"

 
;

 
echo

 
"part

 
2

 
:

 
".$matches[3][$i]

 
."\n"

 
;

 
echo

 
"part

 
3

 
:

 
".$matches[4][$i]

 
."\n\n"

 
;

 
}



This example will produce: