File: pcre.pattern.syntax.html

package info (click to toggle)
php3 3%3A3.0.18-0potato1.1
  • links: PTS
  • area: main
  • in suites: potato
  • size: 17,736 kB
  • ctags: 11,198
  • sloc: ansic: 108,120; sh: 2,512; php: 2,024; yacc: 1,887; makefile: 1,038; perl: 537; pascal: 238; awk: 90; cpp: 28; sql: 11
file content (1259 lines) | stat: -rw-r--r-- 114,697 bytes parent folder | download | duplicates (3)
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
<HTML
><HEAD
><TITLE
>Pattern Syntax</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.57"><LINK
REL="HOME"
TITLE="PHP Manual"
HREF="manual.html"><LINK
REL="UP"
TITLE="Regular Expression Functions (Perl-Compatible)"
HREF="ref.pcre.html"><LINK
REL="PREVIOUS"
TITLE="Pattern Modifiers"
HREF="pcre.pattern.modifiers.html"><LINK
REL="NEXT"
TITLE="Regular Expression Functions (POSIX Extended)"
HREF="ref.regex.html"><META
NAME="HTTP_EQUIV"
CONTENT="text/html; charset=ISO-8859-1"></HEAD
><BODY
CLASS="refentry"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>PHP Manual</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="pcre.pattern.modifiers.html"
>Prev</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
></TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="ref.regex.html"
>Next</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><H1
><A
NAME="pcre.pattern.syntax"
>Pattern Syntax</A
></H1
><DIV
CLASS="refnamediv"
><A
NAME="AEN33168"
></A
><P
>    (unknown)</P
>Pattern Syntax&nbsp;--&nbsp;Describes PCRE regex syntax</DIV
><DIV
CLASS="refsect1"
><A
NAME="AEN33171"
></A
><H2
>Description</H2
><P
CLASS="literallayout"
><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;PCRE&nbsp;library&nbsp;is&nbsp;a&nbsp;set&nbsp;of&nbsp;functions&nbsp;that&nbsp;implement&nbsp;regular<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;expression&nbsp;pattern&nbsp;matching&nbsp;using&nbsp;the&nbsp;same&nbsp;syntax&nbsp;and&nbsp;semantics<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;as&nbsp;Perl&nbsp;5,&nbsp;with&nbsp;just&nbsp;a&nbsp;few&nbsp;differences&nbsp;(see&nbsp;below).&nbsp;&nbsp;The&nbsp;current<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;implementation&nbsp;corresponds&nbsp;to&nbsp;Perl&nbsp;5.005.<br>
&nbsp;&nbsp;&nbsp;&nbsp;</P
></DIV
><DIV
CLASS="refsect1"
><A
NAME="AEN33174"
></A
><H2
>Differences From Perl</H2
><P
CLASS="literallayout"
><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;differences&nbsp;described&nbsp;here&nbsp;&nbsp;are&nbsp;&nbsp;with&nbsp;&nbsp;respect&nbsp;&nbsp;to&nbsp;&nbsp;Perl<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5.005.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.&nbsp;By&nbsp;default,&nbsp;a&nbsp;whitespace&nbsp;character&nbsp;is&nbsp;any&nbsp;character&nbsp;&nbsp;that<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;&nbsp;C&nbsp;&nbsp;library&nbsp;&nbsp;function&nbsp;isspace()&nbsp;recognizes,&nbsp;though&nbsp;it&nbsp;is<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;possible&nbsp;to&nbsp;compile&nbsp;PCRE&nbsp;&nbsp;with&nbsp;&nbsp;alternative&nbsp;&nbsp;character&nbsp;&nbsp;type<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tables.&nbsp;Normally&nbsp;isspace()&nbsp;matches&nbsp;space,&nbsp;formfeed,&nbsp;newline,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;carriage&nbsp;return,&nbsp;horizontal&nbsp;tab,&nbsp;and&nbsp;vertical&nbsp;tab.&nbsp;Perl&nbsp;5&nbsp;no<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;longer&nbsp;&nbsp;includes&nbsp;vertical&nbsp;tab&nbsp;in&nbsp;its&nbsp;set&nbsp;of&nbsp;whitespace&nbsp;char-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;acters.&nbsp;The&nbsp;\v&nbsp;escape&nbsp;that&nbsp;was&nbsp;in&nbsp;the&nbsp;Perl&nbsp;documentation&nbsp;for<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;long&nbsp;time&nbsp;was&nbsp;never&nbsp;in&nbsp;fact&nbsp;recognized.&nbsp;However,&nbsp;the&nbsp;char-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;acter&nbsp;itself&nbsp;was&nbsp;treated&nbsp;as&nbsp;whitespace&nbsp;at&nbsp;least&nbsp;up&nbsp;to&nbsp;5.002.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;In&nbsp;5.004&nbsp;and&nbsp;5.005&nbsp;it&nbsp;does&nbsp;not&nbsp;match&nbsp;\s.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.&nbsp;PCRE&nbsp;does&nbsp;&nbsp;not&nbsp;&nbsp;allow&nbsp;&nbsp;repeat&nbsp;&nbsp;quantifiers&nbsp;&nbsp;on&nbsp;&nbsp;lookahead<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assertions.&nbsp;Perl&nbsp;permits&nbsp;them,&nbsp;but&nbsp;they&nbsp;do&nbsp;not&nbsp;mean&nbsp;what&nbsp;you<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;might&nbsp;think.&nbsp;For&nbsp;example,&nbsp;(?!a){3}&nbsp;does&nbsp;not&nbsp;assert&nbsp;that&nbsp;&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next&nbsp;&nbsp;three&nbsp;characters&nbsp;are&nbsp;not&nbsp;"a".&nbsp;It&nbsp;just&nbsp;asserts&nbsp;that&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next&nbsp;character&nbsp;is&nbsp;not&nbsp;"a"&nbsp;three&nbsp;times.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.&nbsp;Capturing&nbsp;subpatterns&nbsp;that&nbsp;occur&nbsp;inside&nbsp;&nbsp;negative&nbsp;&nbsp;looka-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;head&nbsp;&nbsp;assertions&nbsp;&nbsp;are&nbsp;&nbsp;counted,&nbsp;&nbsp;but&nbsp;&nbsp;their&nbsp;&nbsp;entries&nbsp;&nbsp;in&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;offsets&nbsp;vector&nbsp;are&nbsp;never&nbsp;set.&nbsp;Perl&nbsp;sets&nbsp;its&nbsp;numerical&nbsp;&nbsp;vari-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ables&nbsp;&nbsp;from&nbsp;&nbsp;any&nbsp;&nbsp;such&nbsp;&nbsp;patterns&nbsp;that&nbsp;are&nbsp;matched&nbsp;before&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assertion&nbsp;fails&nbsp;to&nbsp;match&nbsp;something&nbsp;(thereby&nbsp;succeeding),&nbsp;but<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;only&nbsp;&nbsp;if&nbsp;&nbsp;the&nbsp;negative&nbsp;lookahead&nbsp;assertion&nbsp;contains&nbsp;just&nbsp;one<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;branch.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4.&nbsp;Though&nbsp;binary&nbsp;zero&nbsp;characters&nbsp;are&nbsp;supported&nbsp;in&nbsp;&nbsp;the&nbsp;&nbsp;sub-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ject&nbsp;&nbsp;string,&nbsp;&nbsp;they&nbsp;&nbsp;are&nbsp;&nbsp;not&nbsp;&nbsp;allowed&nbsp;&nbsp;in&nbsp;&nbsp;a&nbsp;pattern&nbsp;string<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;because&nbsp;it&nbsp;is&nbsp;passed&nbsp;as&nbsp;a&nbsp;normal&nbsp;&nbsp;C&nbsp;&nbsp;string,&nbsp;&nbsp;terminated&nbsp;&nbsp;by<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zero.&nbsp;The&nbsp;escape&nbsp;sequence&nbsp;"\0"&nbsp;can&nbsp;be&nbsp;used&nbsp;in&nbsp;the&nbsp;pattern&nbsp;to<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;represent&nbsp;a&nbsp;binary&nbsp;zero.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5.&nbsp;The&nbsp;following&nbsp;Perl&nbsp;escape&nbsp;sequences&nbsp;&nbsp;are&nbsp;&nbsp;not&nbsp;&nbsp;supported:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\l,&nbsp;&nbsp;\u,&nbsp;&nbsp;\L,&nbsp;&nbsp;\U,&nbsp;&nbsp;\E,&nbsp;\Q.&nbsp;In&nbsp;fact&nbsp;these&nbsp;are&nbsp;implemented&nbsp;by<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Perl's&nbsp;general&nbsp;string-handling&nbsp;and&nbsp;are&nbsp;not&nbsp;part&nbsp;of&nbsp;its&nbsp;&nbsp;pat-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tern&nbsp;matching&nbsp;engine.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6.&nbsp;The&nbsp;Perl&nbsp;\G&nbsp;assertion&nbsp;is&nbsp;&nbsp;not&nbsp;&nbsp;supported&nbsp;&nbsp;as&nbsp;&nbsp;it&nbsp;&nbsp;is&nbsp;&nbsp;not<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;relevant&nbsp;to&nbsp;single&nbsp;pattern&nbsp;matches.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7.&nbsp;Fairly&nbsp;obviously,&nbsp;PCRE&nbsp;does&nbsp;&nbsp;not&nbsp;&nbsp;support&nbsp;&nbsp;the&nbsp;&nbsp;(?{code})<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;construction.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8.&nbsp;There&nbsp;are&nbsp;at&nbsp;the&nbsp;time&nbsp;of&nbsp;writing&nbsp;some&nbsp;&nbsp;oddities&nbsp;&nbsp;in&nbsp;&nbsp;Perl<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5.005_02&nbsp;&nbsp;concerned&nbsp;&nbsp;with&nbsp;&nbsp;the&nbsp;&nbsp;settings&nbsp;of&nbsp;captured&nbsp;strings<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;when&nbsp;part&nbsp;of&nbsp;a&nbsp;pattern&nbsp;is&nbsp;repeated.&nbsp;&nbsp;For&nbsp;&nbsp;example,&nbsp;&nbsp;matching<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"aba"&nbsp;&nbsp;against&nbsp;the&nbsp;pattern&nbsp;/^(a(b)?)+$/&nbsp;sets&nbsp;$2&nbsp;to&nbsp;the&nbsp;value<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"b",&nbsp;but&nbsp;matching&nbsp;"aabbaa"&nbsp;against&nbsp;/^(aa(bb)?)+$/&nbsp;leaves&nbsp;&nbsp;$2<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unset.&nbsp;&nbsp;&nbsp;&nbsp;However,&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;the&nbsp;&nbsp;&nbsp;pattern&nbsp;&nbsp;&nbsp;is&nbsp;&nbsp;&nbsp;changed&nbsp;&nbsp;&nbsp;to<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/^(aa(b(b))?)+$/&nbsp;then&nbsp;$2&nbsp;(and&nbsp;$3)&nbsp;get&nbsp;set.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;In&nbsp;Perl&nbsp;5.004&nbsp;$2&nbsp;is&nbsp;set&nbsp;in&nbsp;both&nbsp;cases,&nbsp;and&nbsp;that&nbsp;is&nbsp;also&nbsp;true<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;PCRE.&nbsp;If&nbsp;in&nbsp;the&nbsp;future&nbsp;Perl&nbsp;changes&nbsp;to&nbsp;a&nbsp;consistent&nbsp;state<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;that&nbsp;is&nbsp;different,&nbsp;PCRE&nbsp;may&nbsp;change&nbsp;to&nbsp;follow.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9.&nbsp;Another&nbsp;as&nbsp;yet&nbsp;unresolved&nbsp;discrepancy&nbsp;&nbsp;is&nbsp;&nbsp;that&nbsp;&nbsp;in&nbsp;&nbsp;Perl<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5.005_02&nbsp;&nbsp;the&nbsp;&nbsp;pattern&nbsp;/^(a)?(?(1)a|b)+$/&nbsp;matches&nbsp;the&nbsp;string<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"a",&nbsp;whereas&nbsp;in&nbsp;PCRE&nbsp;it&nbsp;does&nbsp;not.&nbsp;&nbsp;However,&nbsp;in&nbsp;both&nbsp;Perl&nbsp;and<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCRE&nbsp;/^(a)?a/&nbsp;matched&nbsp;against&nbsp;"a"&nbsp;leaves&nbsp;$1&nbsp;unset.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10.&nbsp;PCRE&nbsp;&nbsp;provides&nbsp;&nbsp;some&nbsp;&nbsp;extensions&nbsp;&nbsp;to&nbsp;&nbsp;the&nbsp;&nbsp;Perl&nbsp;&nbsp;regular<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;expression&nbsp;facilities:<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(a)&nbsp;Although&nbsp;lookbehind&nbsp;assertions&nbsp;must&nbsp;match&nbsp;&nbsp;fixed&nbsp;&nbsp;length<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strings,&nbsp;&nbsp;each&nbsp;&nbsp;alternative&nbsp;branch&nbsp;of&nbsp;a&nbsp;lookbehind&nbsp;assertion<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;can&nbsp;match&nbsp;a&nbsp;different&nbsp;length&nbsp;of&nbsp;string.&nbsp;Perl&nbsp;5.005&nbsp;&nbsp;requires<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;them&nbsp;all&nbsp;to&nbsp;have&nbsp;the&nbsp;same&nbsp;length.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(b)&nbsp;If&nbsp;PCRE_DOLLAR_ENDONLY&nbsp;is&nbsp;set&nbsp;and&nbsp;PCRE_MULTILINE&nbsp;is&nbsp;&nbsp;not<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set,&nbsp;&nbsp;the&nbsp;&nbsp;$&nbsp;meta-&nbsp;character&nbsp;matches&nbsp;only&nbsp;at&nbsp;the&nbsp;very&nbsp;end&nbsp;of<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;string.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(c)&nbsp;If&nbsp;PCRE_EXTRA&nbsp;is&nbsp;set,&nbsp;a&nbsp;backslash&nbsp;followed&nbsp;by&nbsp;&nbsp;a&nbsp;&nbsp;letter<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;no&nbsp;special&nbsp;meaning&nbsp;is&nbsp;faulted.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(d)&nbsp;If&nbsp;PCRE_UNGREEDY&nbsp;is&nbsp;set,&nbsp;the&nbsp;greediness&nbsp;of&nbsp;&nbsp;the&nbsp;&nbsp;repeti-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tion&nbsp;&nbsp;quantifiers&nbsp;&nbsp;is&nbsp;inverted,&nbsp;that&nbsp;is,&nbsp;by&nbsp;default&nbsp;they&nbsp;are<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;not&nbsp;greedy,&nbsp;but&nbsp;if&nbsp;followed&nbsp;by&nbsp;a&nbsp;question&nbsp;mark&nbsp;they&nbsp;are.<br>
&nbsp;&nbsp;&nbsp;&nbsp;</P
></DIV
><DIV
CLASS="refsect1"
><A
NAME="AEN33177"
></A
><H2
>Regular Expression Details</H2
><P
CLASS="literallayout"
><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;syntax&nbsp;and&nbsp;semantics&nbsp;of&nbsp;&nbsp;the&nbsp;&nbsp;regular&nbsp;&nbsp;expressions&nbsp;&nbsp;sup-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ported&nbsp;&nbsp;by&nbsp;PCRE&nbsp;are&nbsp;described&nbsp;below.&nbsp;Regular&nbsp;expressions&nbsp;are<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;also&nbsp;described&nbsp;in&nbsp;the&nbsp;Perl&nbsp;documentation&nbsp;and&nbsp;in&nbsp;a&nbsp;number&nbsp;&nbsp;of<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;other&nbsp;&nbsp;books,&nbsp;&nbsp;some&nbsp;&nbsp;of&nbsp;which&nbsp;have&nbsp;copious&nbsp;examples.&nbsp;Jeffrey<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Friedl's&nbsp;&nbsp;"Mastering&nbsp;&nbsp;Regular&nbsp;&nbsp;Expressions",&nbsp;&nbsp;published&nbsp;&nbsp;&nbsp;by<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;O'Reilly&nbsp;&nbsp;(ISBN&nbsp;1-56592-257-3),&nbsp;covers&nbsp;them&nbsp;in&nbsp;great&nbsp;detail.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;description&nbsp;here&nbsp;is&nbsp;intended&nbsp;as&nbsp;reference&nbsp;documentation.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;regular&nbsp;expression&nbsp;is&nbsp;a&nbsp;pattern&nbsp;that&nbsp;is&nbsp;matched&nbsp;against&nbsp;&nbsp;a<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subject&nbsp;string&nbsp;from&nbsp;left&nbsp;to&nbsp;right.&nbsp;Most&nbsp;characters&nbsp;stand&nbsp;for<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;themselves&nbsp;in&nbsp;a&nbsp;pattern,&nbsp;and&nbsp;match&nbsp;the&nbsp;corresponding&nbsp;charac-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ters&nbsp;in&nbsp;the&nbsp;subject.&nbsp;As&nbsp;a&nbsp;trivial&nbsp;example,&nbsp;the&nbsp;pattern<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;quick&nbsp;brown&nbsp;fox<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matches&nbsp;a&nbsp;portion&nbsp;of&nbsp;a&nbsp;subject&nbsp;string&nbsp;that&nbsp;is&nbsp;&nbsp;identical&nbsp;&nbsp;to<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;itself.&nbsp;&nbsp;The&nbsp;&nbsp;power&nbsp;&nbsp;of&nbsp;&nbsp;regular&nbsp;&nbsp;expressions&nbsp;comes&nbsp;from&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ability&nbsp;to&nbsp;include&nbsp;alternatives&nbsp;and&nbsp;repetitions&nbsp;in&nbsp;the&nbsp;&nbsp;pat-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tern.&nbsp;&nbsp;These&nbsp;&nbsp;are&nbsp;encoded&nbsp;in&nbsp;the&nbsp;pattern&nbsp;by&nbsp;the&nbsp;use&nbsp;of&nbsp;<I
CLASS="emphasis"
>meta</I
>-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I
CLASS="emphasis"
>characters</I
>,&nbsp;which&nbsp;do&nbsp;not&nbsp;stand&nbsp;for&nbsp;&nbsp;themselves&nbsp;&nbsp;but&nbsp;&nbsp;instead<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;are&nbsp;interpreted&nbsp;in&nbsp;some&nbsp;special&nbsp;way.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;There&nbsp;are&nbsp;two&nbsp;different&nbsp;sets&nbsp;of&nbsp;meta-characters:&nbsp;those&nbsp;&nbsp;that<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;are&nbsp;&nbsp;recognized&nbsp;anywhere&nbsp;in&nbsp;the&nbsp;pattern&nbsp;except&nbsp;within&nbsp;square<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;brackets,&nbsp;and&nbsp;those&nbsp;that&nbsp;are&nbsp;recognized&nbsp;in&nbsp;square&nbsp;&nbsp;brackets.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Outside&nbsp;square&nbsp;brackets,&nbsp;the&nbsp;meta-characters&nbsp;are&nbsp;as&nbsp;follows:<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;general&nbsp;escape&nbsp;character&nbsp;with&nbsp;several&nbsp;uses<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;^&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assert&nbsp;start&nbsp;of&nbsp;&nbsp;subject&nbsp;&nbsp;(or&nbsp;&nbsp;line,&nbsp;&nbsp;in&nbsp;&nbsp;multiline<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mode)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assert&nbsp;end&nbsp;of&nbsp;subject&nbsp;(or&nbsp;line,&nbsp;in&nbsp;multiline&nbsp;mode)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;match&nbsp;any&nbsp;character&nbsp;except&nbsp;newline&nbsp;(by&nbsp;default)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;character&nbsp;class&nbsp;definition<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;of&nbsp;alternative&nbsp;branch<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;subpattern<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;subpattern<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;extends&nbsp;the&nbsp;meaning&nbsp;of&nbsp;(<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;also&nbsp;0&nbsp;or&nbsp;1&nbsp;quantifier<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;also&nbsp;quantifier&nbsp;minimizer<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;or&nbsp;more&nbsp;quantifier<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;or&nbsp;more&nbsp;quantifier<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;min/max&nbsp;quantifier<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Part&nbsp;of&nbsp;a&nbsp;pattern&nbsp;that&nbsp;is&nbsp;in&nbsp;square&nbsp;&nbsp;brackets&nbsp;&nbsp;is&nbsp;&nbsp;called&nbsp;&nbsp;a<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"character&nbsp;&nbsp;class".&nbsp;&nbsp;In&nbsp;&nbsp;a&nbsp;&nbsp;character&nbsp;&nbsp;class&nbsp;&nbsp;the&nbsp;only&nbsp;meta-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;characters&nbsp;are:<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;general&nbsp;escape&nbsp;character<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;^&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;negate&nbsp;the&nbsp;class,&nbsp;but&nbsp;only&nbsp;if&nbsp;the&nbsp;first&nbsp;character<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;indicates&nbsp;character&nbsp;range<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;terminates&nbsp;the&nbsp;character&nbsp;class<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;following&nbsp;sections&nbsp;describe&nbsp;&nbsp;the&nbsp;&nbsp;use&nbsp;&nbsp;of&nbsp;&nbsp;each&nbsp;&nbsp;of&nbsp;&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;meta-characters.<br>
<br>
BACKSLASH<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;backslash&nbsp;character&nbsp;has&nbsp;several&nbsp;uses.&nbsp;Firstly,&nbsp;if&nbsp;it&nbsp;&nbsp;is<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;followed&nbsp;&nbsp;by&nbsp;&nbsp;a&nbsp;&nbsp;non-alphameric&nbsp;character,&nbsp;it&nbsp;takes&nbsp;away&nbsp;any<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;special&nbsp;&nbsp;meaning&nbsp;&nbsp;that&nbsp;&nbsp;character&nbsp;&nbsp;may&nbsp;&nbsp;have.&nbsp;&nbsp;This&nbsp;&nbsp;use&nbsp;&nbsp;of<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;backslash&nbsp;&nbsp;as&nbsp;&nbsp;an&nbsp;&nbsp;escape&nbsp;&nbsp;character&nbsp;applies&nbsp;both&nbsp;inside&nbsp;and<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outside&nbsp;character&nbsp;classes.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;example,&nbsp;if&nbsp;you&nbsp;want&nbsp;to&nbsp;match&nbsp;a&nbsp;"*"&nbsp;character,&nbsp;you&nbsp;write<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"\*"&nbsp;in&nbsp;the&nbsp;pattern.&nbsp;This&nbsp;applies&nbsp;whether&nbsp;or&nbsp;not&nbsp;the&nbsp;follow-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ing&nbsp;character&nbsp;would&nbsp;otherwise&nbsp;&nbsp;be&nbsp;&nbsp;interpreted&nbsp;&nbsp;as&nbsp;&nbsp;a&nbsp;&nbsp;meta-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;character,&nbsp;&nbsp;so&nbsp;it&nbsp;is&nbsp;always&nbsp;safe&nbsp;to&nbsp;precede&nbsp;a&nbsp;non-alphameric<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;"\"&nbsp;to&nbsp;specify&nbsp;that&nbsp;it&nbsp;stands&nbsp;for&nbsp;itself.&nbsp;&nbsp;In&nbsp;&nbsp;particu-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lar,&nbsp;if&nbsp;you&nbsp;want&nbsp;to&nbsp;match&nbsp;a&nbsp;backslash,&nbsp;you&nbsp;write&nbsp;"\\".<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;a&nbsp;pattern&nbsp;is&nbsp;compiled&nbsp;with&nbsp;the&nbsp;PCRE_EXTENDED&nbsp;option,&nbsp;whi-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tespace&nbsp;in&nbsp;the&nbsp;pattern&nbsp;(other&nbsp;than&nbsp;in&nbsp;a&nbsp;character&nbsp;class)&nbsp;and<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;characters&nbsp;between&nbsp;a&nbsp;"#"&nbsp;outside&nbsp;a&nbsp;character&nbsp;class&nbsp;&nbsp;and&nbsp;&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next&nbsp;&nbsp;newline&nbsp;&nbsp;character&nbsp;&nbsp;are&nbsp;ignored.&nbsp;An&nbsp;escaping&nbsp;backslash<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;can&nbsp;be&nbsp;used&nbsp;to&nbsp;include&nbsp;a&nbsp;whitespace&nbsp;or&nbsp;"#"&nbsp;character&nbsp;as&nbsp;part<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;the&nbsp;pattern.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;second&nbsp;use&nbsp;of&nbsp;backslash&nbsp;provides&nbsp;a&nbsp;way&nbsp;&nbsp;of&nbsp;&nbsp;encoding&nbsp;&nbsp;non-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printing&nbsp;&nbsp;characters&nbsp;&nbsp;in&nbsp;patterns&nbsp;in&nbsp;a&nbsp;visible&nbsp;manner.&nbsp;There<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;no&nbsp;restriction&nbsp;on&nbsp;the&nbsp;appearance&nbsp;of&nbsp;non-printing&nbsp;&nbsp;charac-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ters,&nbsp;&nbsp;apart&nbsp;from&nbsp;the&nbsp;binary&nbsp;zero&nbsp;that&nbsp;terminates&nbsp;a&nbsp;pattern,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;but&nbsp;when&nbsp;a&nbsp;pattern&nbsp;is&nbsp;being&nbsp;prepared&nbsp;by&nbsp;text&nbsp;editing,&nbsp;it&nbsp;&nbsp;is<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;usually&nbsp;&nbsp;easier&nbsp;to&nbsp;use&nbsp;one&nbsp;of&nbsp;the&nbsp;following&nbsp;escape&nbsp;sequences<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;than&nbsp;the&nbsp;binary&nbsp;character&nbsp;it&nbsp;represents:<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alarm,&nbsp;that&nbsp;is,&nbsp;the&nbsp;BEL&nbsp;character&nbsp;(hex&nbsp;07)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\cx&nbsp;&nbsp;&nbsp;&nbsp;"control-x",&nbsp;where&nbsp;x&nbsp;is&nbsp;any&nbsp;character<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\e&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;escape&nbsp;(hex&nbsp;1B)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;formfeed&nbsp;(hex&nbsp;0C)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newline&nbsp;(hex&nbsp;0A)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;carriage&nbsp;return&nbsp;(hex&nbsp;0D)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tab&nbsp;(hex&nbsp;09)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\xhh&nbsp;&nbsp;&nbsp;character&nbsp;with&nbsp;hex&nbsp;code&nbsp;hh<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\ddd&nbsp;&nbsp;&nbsp;character&nbsp;with&nbsp;octal&nbsp;code&nbsp;ddd,&nbsp;or&nbsp;backreference<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;precise&nbsp;effect&nbsp;of&nbsp;"\cx"&nbsp;is&nbsp;as&nbsp;follows:&nbsp;if&nbsp;"x"&nbsp;is&nbsp;a&nbsp;lower<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;&nbsp;letter,&nbsp;&nbsp;it&nbsp;&nbsp;is&nbsp;converted&nbsp;to&nbsp;upper&nbsp;case.&nbsp;Then&nbsp;bit&nbsp;6&nbsp;of<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;character&nbsp;(hex&nbsp;40)&nbsp;is&nbsp;inverted.&nbsp;&nbsp;Thus&nbsp;"\cz"&nbsp;becomes&nbsp;&nbsp;hex<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1A,&nbsp;but&nbsp;"\c{"&nbsp;becomes&nbsp;hex&nbsp;3B,&nbsp;while&nbsp;"\c;"&nbsp;becomes&nbsp;hex&nbsp;7B.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;After&nbsp;"\x",&nbsp;up&nbsp;to&nbsp;two&nbsp;hexadecimal&nbsp;digits&nbsp;are&nbsp;&nbsp;read&nbsp;&nbsp;(letters<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;can&nbsp;be&nbsp;in&nbsp;upper&nbsp;or&nbsp;lower&nbsp;case).<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;After&nbsp;"\0"&nbsp;up&nbsp;to&nbsp;two&nbsp;further&nbsp;octal&nbsp;digits&nbsp;are&nbsp;read.&nbsp;In&nbsp;&nbsp;both<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cases,&nbsp;&nbsp;if&nbsp;&nbsp;there&nbsp;are&nbsp;fewer&nbsp;than&nbsp;two&nbsp;digits,&nbsp;just&nbsp;those&nbsp;that<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;are&nbsp;present&nbsp;are&nbsp;used.&nbsp;Thus&nbsp;the&nbsp;sequence&nbsp;"\0\x\07"&nbsp;&nbsp;specifies<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;two&nbsp;binary&nbsp;zeros&nbsp;followed&nbsp;by&nbsp;a&nbsp;BEL&nbsp;character.&nbsp;&nbsp;Make&nbsp;sure&nbsp;you<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;supply&nbsp;two&nbsp;digits&nbsp;after&nbsp;the&nbsp;initial&nbsp;zero&nbsp;&nbsp;if&nbsp;&nbsp;the&nbsp;&nbsp;character<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;that&nbsp;follows&nbsp;is&nbsp;itself&nbsp;an&nbsp;octal&nbsp;digit.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;handling&nbsp;of&nbsp;a&nbsp;backslash&nbsp;followed&nbsp;by&nbsp;a&nbsp;digit&nbsp;other&nbsp;than&nbsp;0<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;&nbsp;complicated.&nbsp;&nbsp;&nbsp;Outside&nbsp;&nbsp;a&nbsp;character&nbsp;class,&nbsp;PCRE&nbsp;reads&nbsp;it<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;any&nbsp;following&nbsp;digits&nbsp;as&nbsp;a&nbsp;decimal&nbsp;number.&nbsp;If&nbsp;the&nbsp;&nbsp;number<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;&nbsp;less&nbsp;&nbsp;than&nbsp;&nbsp;10,&nbsp;or&nbsp;if&nbsp;there&nbsp;have&nbsp;been&nbsp;at&nbsp;least&nbsp;that&nbsp;many<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;previous&nbsp;capturing&nbsp;left&nbsp;parentheses&nbsp;in&nbsp;the&nbsp;&nbsp;expression,&nbsp;&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;entire&nbsp;&nbsp;sequence&nbsp;is&nbsp;taken&nbsp;as&nbsp;a&nbsp;<I
CLASS="emphasis"
>back</I
>&nbsp;<I
CLASS="emphasis"
>reference</I
>.&nbsp;A&nbsp;description<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;how&nbsp;this&nbsp;works&nbsp;is&nbsp;given&nbsp;later,&nbsp;following&nbsp;&nbsp;the&nbsp;&nbsp;discussion<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;parenthesized&nbsp;subpatterns.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Inside&nbsp;a&nbsp;character&nbsp;&nbsp;class,&nbsp;&nbsp;or&nbsp;&nbsp;if&nbsp;&nbsp;the&nbsp;&nbsp;decimal&nbsp;&nbsp;number&nbsp;&nbsp;is<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;greater&nbsp;&nbsp;than&nbsp;&nbsp;9&nbsp;and&nbsp;there&nbsp;have&nbsp;not&nbsp;been&nbsp;that&nbsp;many&nbsp;capturing<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subpatterns,&nbsp;PCRE&nbsp;re-reads&nbsp;up&nbsp;to&nbsp;three&nbsp;octal&nbsp;digits&nbsp;&nbsp;follow-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ing&nbsp;&nbsp;the&nbsp;&nbsp;backslash,&nbsp;&nbsp;and&nbsp;&nbsp;generates&nbsp;&nbsp;a&nbsp;single&nbsp;byte&nbsp;from&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;least&nbsp;significant&nbsp;8&nbsp;bits&nbsp;of&nbsp;the&nbsp;value.&nbsp;Any&nbsp;subsequent&nbsp;digits<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stand&nbsp;for&nbsp;themselves.&nbsp;&nbsp;For&nbsp;example:<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\040&nbsp;&nbsp;&nbsp;is&nbsp;another&nbsp;way&nbsp;of&nbsp;writing&nbsp;a&nbsp;space<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\40&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;the&nbsp;same,&nbsp;provided&nbsp;there&nbsp;are&nbsp;fewer&nbsp;than&nbsp;40<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;previous&nbsp;capturing&nbsp;subpatterns<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;always&nbsp;a&nbsp;back&nbsp;reference<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\11&nbsp;&nbsp;&nbsp;&nbsp;might&nbsp;be&nbsp;a&nbsp;back&nbsp;reference,&nbsp;or&nbsp;another&nbsp;way&nbsp;of<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writing&nbsp;a&nbsp;tab<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\011&nbsp;&nbsp;&nbsp;is&nbsp;always&nbsp;a&nbsp;tab<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\0113&nbsp;&nbsp;is&nbsp;a&nbsp;tab&nbsp;followed&nbsp;by&nbsp;the&nbsp;character&nbsp;"3"<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\113&nbsp;&nbsp;&nbsp;is&nbsp;the&nbsp;character&nbsp;with&nbsp;octal&nbsp;code&nbsp;113&nbsp;(since&nbsp;there<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;can&nbsp;be&nbsp;no&nbsp;more&nbsp;than&nbsp;99&nbsp;back&nbsp;references)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\377&nbsp;&nbsp;&nbsp;is&nbsp;a&nbsp;byte&nbsp;consisting&nbsp;entirely&nbsp;of&nbsp;1&nbsp;bits<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\81&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;either&nbsp;a&nbsp;back&nbsp;reference,&nbsp;or&nbsp;a&nbsp;binary&nbsp;zero<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;followed&nbsp;by&nbsp;the&nbsp;two&nbsp;characters&nbsp;"8"&nbsp;and&nbsp;"1"<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Note&nbsp;that&nbsp;octal&nbsp;values&nbsp;of&nbsp;100&nbsp;or&nbsp;greater&nbsp;must&nbsp;not&nbsp;be&nbsp;&nbsp;intro-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;duced&nbsp;&nbsp;by&nbsp;&nbsp;a&nbsp;&nbsp;leading&nbsp;zero,&nbsp;because&nbsp;no&nbsp;more&nbsp;than&nbsp;three&nbsp;octal<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;digits&nbsp;are&nbsp;ever&nbsp;read.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;All&nbsp;the&nbsp;sequences&nbsp;that&nbsp;define&nbsp;a&nbsp;single&nbsp;&nbsp;byte&nbsp;&nbsp;value&nbsp;&nbsp;can&nbsp;&nbsp;be<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;used&nbsp;both&nbsp;inside&nbsp;and&nbsp;outside&nbsp;character&nbsp;classes.&nbsp;In&nbsp;addition,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inside&nbsp;a&nbsp;character&nbsp;class,&nbsp;the&nbsp;sequence&nbsp;"\b"&nbsp;&nbsp;is&nbsp;&nbsp;interpreted<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;as&nbsp;&nbsp;the&nbsp;&nbsp;backspace&nbsp;&nbsp;character&nbsp;&nbsp;(hex&nbsp;08).&nbsp;Outside&nbsp;a&nbsp;character<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;it&nbsp;has&nbsp;a&nbsp;different&nbsp;meaning&nbsp;(see&nbsp;below).<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;third&nbsp;use&nbsp;of&nbsp;backslash&nbsp;is&nbsp;for&nbsp;specifying&nbsp;generic&nbsp;charac-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ter&nbsp;types:<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;any&nbsp;decimal&nbsp;digit<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\D&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;any&nbsp;character&nbsp;that&nbsp;is&nbsp;not&nbsp;a&nbsp;decimal&nbsp;digit<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;any&nbsp;whitespace&nbsp;character<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;any&nbsp;character&nbsp;that&nbsp;is&nbsp;not&nbsp;a&nbsp;whitespace&nbsp;character<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\w&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;any&nbsp;"word"&nbsp;character<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\W&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;any&nbsp;"non-word"&nbsp;character<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Each&nbsp;pair&nbsp;of&nbsp;escape&nbsp;sequences&nbsp;partitions&nbsp;the&nbsp;complete&nbsp;set&nbsp;of<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;characters&nbsp;&nbsp;into&nbsp;&nbsp;two&nbsp;&nbsp;disjoint&nbsp;&nbsp;sets.&nbsp;&nbsp;Any&nbsp;&nbsp;given&nbsp;character<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matches&nbsp;one,&nbsp;and&nbsp;only&nbsp;one,&nbsp;of&nbsp;each&nbsp;pair.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;"word"&nbsp;character&nbsp;is&nbsp;any&nbsp;letter&nbsp;or&nbsp;digit&nbsp;or&nbsp;the&nbsp;&nbsp;underscore<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;character,&nbsp;&nbsp;that&nbsp;&nbsp;is,&nbsp;&nbsp;any&nbsp;&nbsp;character&nbsp;which&nbsp;can&nbsp;be&nbsp;part&nbsp;of&nbsp;a<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Perl&nbsp;"word".&nbsp;The&nbsp;definition&nbsp;of&nbsp;letters&nbsp;and&nbsp;&nbsp;digits&nbsp;&nbsp;is&nbsp;&nbsp;con-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trolled&nbsp;&nbsp;by&nbsp;PCRE's&nbsp;character&nbsp;tables,&nbsp;and&nbsp;may&nbsp;vary&nbsp;if&nbsp;locale-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;specific&nbsp;matching&nbsp;is&nbsp;&nbsp;taking&nbsp;&nbsp;place&nbsp;&nbsp;(see&nbsp;&nbsp;"Locale&nbsp;&nbsp;support"<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;above).&nbsp;For&nbsp;example,&nbsp;in&nbsp;the&nbsp;"fr"&nbsp;(French)&nbsp;locale,&nbsp;some&nbsp;char-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;acter&nbsp;codes&nbsp;greater&nbsp;than&nbsp;128&nbsp;are&nbsp;used&nbsp;for&nbsp;accented&nbsp;&nbsp;letters,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;these&nbsp;are&nbsp;matched&nbsp;by&nbsp;\w.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;These&nbsp;character&nbsp;type&nbsp;sequences&nbsp;can&nbsp;appear&nbsp;&nbsp;both&nbsp;&nbsp;inside&nbsp;&nbsp;and<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outside&nbsp;&nbsp;character&nbsp;classes.&nbsp;They&nbsp;each&nbsp;match&nbsp;one&nbsp;character&nbsp;of<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;appropriate&nbsp;type.&nbsp;If&nbsp;the&nbsp;current&nbsp;matching&nbsp;&nbsp;point&nbsp;&nbsp;is&nbsp;&nbsp;at<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;end&nbsp;of&nbsp;the&nbsp;subject&nbsp;string,&nbsp;all&nbsp;of&nbsp;them&nbsp;fail,&nbsp;since&nbsp;there<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;no&nbsp;character&nbsp;to&nbsp;match.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;fourth&nbsp;use&nbsp;of&nbsp;backslash&nbsp;is&nbsp;&nbsp;for&nbsp;&nbsp;certain&nbsp;&nbsp;simple&nbsp;&nbsp;asser-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tions.&nbsp;An&nbsp;assertion&nbsp;specifies&nbsp;a&nbsp;condition&nbsp;that&nbsp;has&nbsp;to&nbsp;be&nbsp;met<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;a&nbsp;particular&nbsp;point&nbsp;in&nbsp;&nbsp;a&nbsp;&nbsp;match,&nbsp;&nbsp;without&nbsp;&nbsp;consuming&nbsp;&nbsp;any<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;characters&nbsp;&nbsp;from&nbsp;&nbsp;the&nbsp;subject&nbsp;string.&nbsp;The&nbsp;use&nbsp;of&nbsp;subpatterns<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;more&nbsp;complicated&nbsp;&nbsp;assertions&nbsp;&nbsp;is&nbsp;&nbsp;described&nbsp;&nbsp;below.&nbsp;&nbsp;The<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;backslashed&nbsp;assertions&nbsp;are<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;word&nbsp;boundary<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;not&nbsp;a&nbsp;word&nbsp;boundary<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;of&nbsp;subject&nbsp;(independent&nbsp;of&nbsp;multiline&nbsp;mode)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\Z&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;of&nbsp;subject&nbsp;or&nbsp;newline&nbsp;at&nbsp;&nbsp;end&nbsp;&nbsp;(independent&nbsp;&nbsp;of<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;multiline&nbsp;mode)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\z&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;of&nbsp;subject&nbsp;(independent&nbsp;of&nbsp;multiline&nbsp;mode)<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;These&nbsp;assertions&nbsp;may&nbsp;not&nbsp;appear&nbsp;in&nbsp;&nbsp;character&nbsp;&nbsp;classes&nbsp;&nbsp;(but<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;note&nbsp;that&nbsp;"\b"&nbsp;has&nbsp;a&nbsp;different&nbsp;meaning,&nbsp;namely&nbsp;the&nbsp;backspace<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;character,&nbsp;inside&nbsp;a&nbsp;character&nbsp;class).<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;word&nbsp;boundary&nbsp;is&nbsp;a&nbsp;position&nbsp;in&nbsp;the&nbsp;&nbsp;subject&nbsp;&nbsp;string&nbsp;&nbsp;where<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;current&nbsp;character&nbsp;and&nbsp;the&nbsp;previous&nbsp;character&nbsp;do&nbsp;not&nbsp;both<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;match&nbsp;\w&nbsp;or&nbsp;\W&nbsp;(i.e.&nbsp;one&nbsp;matches&nbsp;\w&nbsp;and&nbsp;&nbsp;the&nbsp;&nbsp;other&nbsp;&nbsp;matches<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\W),&nbsp;&nbsp;or&nbsp;the&nbsp;start&nbsp;or&nbsp;end&nbsp;of&nbsp;the&nbsp;string&nbsp;if&nbsp;the&nbsp;first&nbsp;or&nbsp;last<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;character&nbsp;matches&nbsp;\w,&nbsp;respectively.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;\A,&nbsp;\Z,&nbsp;and&nbsp;\z&nbsp;assertions&nbsp;differ&nbsp;&nbsp;from&nbsp;&nbsp;the&nbsp;&nbsp;traditional<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;circumflex&nbsp;&nbsp;and&nbsp;&nbsp;dollar&nbsp;&nbsp;(described&nbsp;below)&nbsp;in&nbsp;that&nbsp;they&nbsp;only<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ever&nbsp;match&nbsp;at&nbsp;the&nbsp;very&nbsp;start&nbsp;and&nbsp;end&nbsp;of&nbsp;the&nbsp;subject&nbsp;&nbsp;string,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;whatever&nbsp;&nbsp;options&nbsp;&nbsp;are&nbsp;&nbsp;set.&nbsp;&nbsp;They&nbsp;&nbsp;are&nbsp;&nbsp;not&nbsp;affected&nbsp;by&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCRE_NOTBOL&nbsp;or&nbsp;PCRE_NOTEOL&nbsp;options.&nbsp;The&nbsp;&nbsp;difference&nbsp;&nbsp;between<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\Z&nbsp;&nbsp;and&nbsp;&nbsp;\z&nbsp;&nbsp;is&nbsp;that&nbsp;\Z&nbsp;matches&nbsp;before&nbsp;a&nbsp;newline&nbsp;that&nbsp;is&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;last&nbsp;character&nbsp;of&nbsp;the&nbsp;string&nbsp;as&nbsp;well&nbsp;as&nbsp;at&nbsp;the&nbsp;&nbsp;end&nbsp;&nbsp;of&nbsp;&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string,&nbsp;whereas&nbsp;\z&nbsp;matches&nbsp;only&nbsp;at&nbsp;the&nbsp;end.<br>
<br>
CIRCUMFLEX&nbsp;AND&nbsp;DOLLAR<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Outside&nbsp;a&nbsp;character&nbsp;class,&nbsp;in&nbsp;the&nbsp;default&nbsp;matching&nbsp;mode,&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;circumflex&nbsp;&nbsp;character&nbsp;&nbsp;is&nbsp;an&nbsp;assertion&nbsp;which&nbsp;is&nbsp;true&nbsp;only&nbsp;if<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;current&nbsp;matching&nbsp;point&nbsp;is&nbsp;at&nbsp;the&nbsp;start&nbsp;&nbsp;of&nbsp;&nbsp;the&nbsp;&nbsp;subject<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string.&nbsp;Inside&nbsp;a&nbsp;character&nbsp;class,&nbsp;circumflex&nbsp;has&nbsp;an&nbsp;entirely<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;different&nbsp;meaning&nbsp;(see&nbsp;below).<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Circumflex&nbsp;need&nbsp;not&nbsp;be&nbsp;the&nbsp;first&nbsp;character&nbsp;of&nbsp;the&nbsp;pattern&nbsp;if<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;&nbsp;number&nbsp;of&nbsp;alternatives&nbsp;are&nbsp;involved,&nbsp;but&nbsp;it&nbsp;should&nbsp;be&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;first&nbsp;thing&nbsp;in&nbsp;each&nbsp;alternative&nbsp;in&nbsp;which&nbsp;it&nbsp;appears&nbsp;&nbsp;if&nbsp;&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pattern&nbsp;is&nbsp;ever&nbsp;to&nbsp;match&nbsp;that&nbsp;branch.&nbsp;If&nbsp;all&nbsp;possible&nbsp;alter-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;natives&nbsp;start&nbsp;with&nbsp;a&nbsp;circumflex,&nbsp;that&nbsp;is,&nbsp;if&nbsp;the&nbsp;pattern&nbsp;&nbsp;is<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;constrained&nbsp;to&nbsp;match&nbsp;only&nbsp;at&nbsp;the&nbsp;start&nbsp;of&nbsp;the&nbsp;subject,&nbsp;it&nbsp;is<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;said&nbsp;to&nbsp;be&nbsp;an&nbsp;"anchored"&nbsp;pattern.&nbsp;(There&nbsp;are&nbsp;also&nbsp;other&nbsp;con-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;structs&nbsp;that&nbsp;can&nbsp;cause&nbsp;a&nbsp;pattern&nbsp;to&nbsp;be&nbsp;anchored.)<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;dollar&nbsp;character&nbsp;is&nbsp;an&nbsp;assertion&nbsp;which&nbsp;is&nbsp;true&nbsp;only&nbsp;if&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;current&nbsp;&nbsp;matching&nbsp;point&nbsp;is&nbsp;at&nbsp;the&nbsp;end&nbsp;of&nbsp;the&nbsp;subject&nbsp;string,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;or&nbsp;immediately&nbsp;before&nbsp;a&nbsp;newline&nbsp;character&nbsp;that&nbsp;is&nbsp;&nbsp;the&nbsp;&nbsp;last<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;character&nbsp;in&nbsp;the&nbsp;string&nbsp;(by&nbsp;default).&nbsp;Dollar&nbsp;need&nbsp;not&nbsp;be&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;last&nbsp;character&nbsp;of&nbsp;the&nbsp;pattern&nbsp;if&nbsp;a&nbsp;&nbsp;number&nbsp;&nbsp;of&nbsp;&nbsp;alternatives<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;are&nbsp;&nbsp;involved,&nbsp;&nbsp;but&nbsp;it&nbsp;should&nbsp;be&nbsp;the&nbsp;last&nbsp;item&nbsp;in&nbsp;any&nbsp;branch<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in&nbsp;which&nbsp;it&nbsp;appears.&nbsp;&nbsp;Dollar&nbsp;has&nbsp;no&nbsp;&nbsp;special&nbsp;&nbsp;meaning&nbsp;&nbsp;in&nbsp;&nbsp;a<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;character&nbsp;class.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;meaning&nbsp;of&nbsp;dollar&nbsp;can&nbsp;be&nbsp;changed&nbsp;so&nbsp;that&nbsp;it&nbsp;matches&nbsp;only<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;&nbsp;&nbsp;the&nbsp;&nbsp;&nbsp;very&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;of&nbsp;&nbsp;&nbsp;the&nbsp;&nbsp;&nbsp;string,&nbsp;&nbsp;by&nbsp;&nbsp;setting&nbsp;&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCRE_DOLLAR_ENDONLY&nbsp;option&nbsp;at&nbsp;compile&nbsp;or&nbsp;matching&nbsp;time.&nbsp;This<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;does&nbsp;not&nbsp;affect&nbsp;the&nbsp;\Z&nbsp;assertion.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;meanings&nbsp;of&nbsp;the&nbsp;circumflex&nbsp;&nbsp;and&nbsp;&nbsp;dollar&nbsp;&nbsp;characters&nbsp;&nbsp;are<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;changed&nbsp;&nbsp;if&nbsp;&nbsp;the&nbsp;&nbsp;PCRE_MULTILINE&nbsp;option&nbsp;is&nbsp;set.&nbsp;When&nbsp;this&nbsp;is<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;case,&nbsp;&nbsp;they&nbsp;&nbsp;match&nbsp;&nbsp;immediately&nbsp;&nbsp;after&nbsp;&nbsp;and&nbsp;&nbsp;immediately<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;before&nbsp;an&nbsp;internal&nbsp;"\n"&nbsp;character,&nbsp;respectively,&nbsp;in&nbsp;addition<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;to&nbsp;matching&nbsp;at&nbsp;the&nbsp;start&nbsp;and&nbsp;end&nbsp;of&nbsp;the&nbsp;subject&nbsp;string.&nbsp;&nbsp;For<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;example,&nbsp;&nbsp;the&nbsp;&nbsp;pattern&nbsp;&nbsp;/^abc$/&nbsp;&nbsp;matches&nbsp;&nbsp;the&nbsp;subject&nbsp;string<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"def\nabc"&nbsp;in&nbsp;multiline&nbsp;&nbsp;mode,&nbsp;&nbsp;but&nbsp;&nbsp;not&nbsp;&nbsp;otherwise.&nbsp;&nbsp;Conse-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;quently,&nbsp;&nbsp;patterns&nbsp;&nbsp;that&nbsp;&nbsp;are&nbsp;&nbsp;anchored&nbsp;&nbsp;in&nbsp;single&nbsp;line&nbsp;mode<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;because&nbsp;all&nbsp;branches&nbsp;start&nbsp;with&nbsp;"^"&nbsp;are&nbsp;not&nbsp;anchored&nbsp;in&nbsp;mul-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tiline&nbsp;&nbsp;mode.&nbsp;&nbsp;The&nbsp;&nbsp;PCRE_DOLLAR_ENDONLY&nbsp;option&nbsp;is&nbsp;ignored&nbsp;if<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCRE_MULTILINE&nbsp;is&nbsp;set.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Note&nbsp;that&nbsp;the&nbsp;sequences&nbsp;\A,&nbsp;\Z,&nbsp;and&nbsp;\z&nbsp;can&nbsp;be&nbsp;used&nbsp;to&nbsp;&nbsp;match<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;&nbsp;start&nbsp;&nbsp;and&nbsp;end&nbsp;of&nbsp;the&nbsp;subject&nbsp;in&nbsp;both&nbsp;modes,&nbsp;and&nbsp;if&nbsp;all<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;branches&nbsp;of&nbsp;a&nbsp;pattern&nbsp;start&nbsp;with&nbsp;\A&nbsp;is&nbsp;it&nbsp;&nbsp;always&nbsp;&nbsp;anchored,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;whether&nbsp;PCRE_MULTILINE&nbsp;is&nbsp;set&nbsp;or&nbsp;not.<br>
<br>
<br>
<br>
FULL&nbsp;STOP&nbsp;(PERIOD,&nbsp;DOT)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Outside&nbsp;a&nbsp;character&nbsp;class,&nbsp;a&nbsp;dot&nbsp;in&nbsp;the&nbsp;pattern&nbsp;matches&nbsp;&nbsp;any<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;one&nbsp;&nbsp;character&nbsp;&nbsp;in&nbsp;&nbsp;the&nbsp;&nbsp;subject,&nbsp;&nbsp;including&nbsp;&nbsp;a&nbsp;non-printing<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;character,&nbsp;but&nbsp;not&nbsp;(by&nbsp;default)&nbsp;newline.&nbsp;&nbsp;If&nbsp;the&nbsp;PCRE_DOTALL<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;option&nbsp;&nbsp;is&nbsp;&nbsp;set,&nbsp;&nbsp;then&nbsp;dots&nbsp;match&nbsp;newlines&nbsp;as&nbsp;well.&nbsp;The&nbsp;han-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dling&nbsp;of&nbsp;dot&nbsp;is&nbsp;entirely&nbsp;independent&nbsp;of&nbsp;the&nbsp;handling&nbsp;of&nbsp;cir-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cumflex&nbsp;&nbsp;and&nbsp;&nbsp;dollar,&nbsp;&nbsp;the&nbsp;only&nbsp;relationship&nbsp;being&nbsp;that&nbsp;they<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;both&nbsp;involve&nbsp;newline&nbsp;characters.&nbsp;&nbsp;Dot&nbsp;has&nbsp;no&nbsp;special&nbsp;meaning<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in&nbsp;a&nbsp;character&nbsp;class.<br>
<br>
<br>
<br>
SQUARE&nbsp;BRACKETS<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An&nbsp;opening&nbsp;square&nbsp;bracket&nbsp;introduces&nbsp;a&nbsp;character&nbsp;class,&nbsp;ter-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;minated&nbsp;&nbsp;by&nbsp;&nbsp;a&nbsp;&nbsp;closing&nbsp;&nbsp;square&nbsp;&nbsp;bracket.&nbsp;&nbsp;A&nbsp;&nbsp;closing&nbsp;square<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bracket&nbsp;on&nbsp;its&nbsp;own&nbsp;is&nbsp;&nbsp;not&nbsp;&nbsp;special.&nbsp;&nbsp;If&nbsp;&nbsp;a&nbsp;&nbsp;closing&nbsp;&nbsp;square<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bracket&nbsp;&nbsp;is&nbsp;&nbsp;required&nbsp;as&nbsp;a&nbsp;member&nbsp;of&nbsp;the&nbsp;class,&nbsp;it&nbsp;should&nbsp;be<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;first&nbsp;data&nbsp;character&nbsp;in&nbsp;the&nbsp;class&nbsp;(after&nbsp;an&nbsp;initial&nbsp;cir-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cumflex,&nbsp;if&nbsp;present)&nbsp;or&nbsp;escaped&nbsp;with&nbsp;a&nbsp;backslash.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;character&nbsp;class&nbsp;matches&nbsp;a&nbsp;single&nbsp;character&nbsp;in&nbsp;the&nbsp;subject;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;&nbsp;character&nbsp;&nbsp;must&nbsp;&nbsp;be&nbsp;in&nbsp;the&nbsp;set&nbsp;of&nbsp;characters&nbsp;defined&nbsp;by<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;class,&nbsp;unless&nbsp;the&nbsp;first&nbsp;character&nbsp;in&nbsp;the&nbsp;class&nbsp;is&nbsp;a&nbsp;cir-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cumflex,&nbsp;&nbsp;in&nbsp;which&nbsp;case&nbsp;the&nbsp;subject&nbsp;character&nbsp;must&nbsp;not&nbsp;be&nbsp;in<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;set&nbsp;defined&nbsp;by&nbsp;the&nbsp;class.&nbsp;If&nbsp;a&nbsp;&nbsp;circumflex&nbsp;&nbsp;is&nbsp;&nbsp;actually<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;required&nbsp;&nbsp;as&nbsp;&nbsp;a&nbsp;&nbsp;member&nbsp;&nbsp;of&nbsp;&nbsp;the&nbsp;class,&nbsp;ensure&nbsp;it&nbsp;is&nbsp;not&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;first&nbsp;character,&nbsp;or&nbsp;escape&nbsp;it&nbsp;with&nbsp;a&nbsp;backslash.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;example,&nbsp;the&nbsp;character&nbsp;class&nbsp;[aeiou]&nbsp;matches&nbsp;&nbsp;any&nbsp;&nbsp;lower<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;vowel,&nbsp;while&nbsp;[^aeiou]&nbsp;matches&nbsp;any&nbsp;character&nbsp;that&nbsp;is&nbsp;not<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;lower&nbsp;case&nbsp;vowel.&nbsp;Note&nbsp;that&nbsp;a&nbsp;circumflex&nbsp;is&nbsp;&nbsp;just&nbsp;&nbsp;a&nbsp;&nbsp;con-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;venient&nbsp;&nbsp;notation&nbsp;for&nbsp;specifying&nbsp;the&nbsp;characters&nbsp;which&nbsp;are&nbsp;in<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;class&nbsp;by&nbsp;enumerating&nbsp;those&nbsp;that&nbsp;are&nbsp;not.&nbsp;It&nbsp;&nbsp;is&nbsp;&nbsp;not&nbsp;&nbsp;an<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assertion:&nbsp;&nbsp;it&nbsp;&nbsp;still&nbsp;&nbsp;consumes&nbsp;a&nbsp;character&nbsp;from&nbsp;the&nbsp;subject<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string,&nbsp;and&nbsp;fails&nbsp;if&nbsp;the&nbsp;current&nbsp;pointer&nbsp;is&nbsp;at&nbsp;&nbsp;the&nbsp;&nbsp;end&nbsp;&nbsp;of<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;string.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;When&nbsp;caseless&nbsp;matching&nbsp;&nbsp;is&nbsp;&nbsp;set,&nbsp;&nbsp;any&nbsp;&nbsp;letters&nbsp;&nbsp;in&nbsp;&nbsp;a&nbsp;&nbsp;class<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;represent&nbsp;&nbsp;both&nbsp;their&nbsp;upper&nbsp;case&nbsp;and&nbsp;lower&nbsp;case&nbsp;versions,&nbsp;so<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;example,&nbsp;a&nbsp;caseless&nbsp;[aeiou]&nbsp;matches&nbsp;"A"&nbsp;as&nbsp;well&nbsp;as&nbsp;&nbsp;"a",<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;&nbsp;a&nbsp;caseless&nbsp;[^aeiou]&nbsp;does&nbsp;not&nbsp;match&nbsp;"A",&nbsp;whereas&nbsp;a&nbsp;case-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ful&nbsp;version&nbsp;would.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;newline&nbsp;character&nbsp;is&nbsp;never&nbsp;treated&nbsp;in&nbsp;any&nbsp;special&nbsp;way&nbsp;in<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;character&nbsp;&nbsp;classes,&nbsp;&nbsp;whatever&nbsp;the&nbsp;setting&nbsp;of&nbsp;the&nbsp;PCRE_DOTALL<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;or&nbsp;PCRE_MULTILINE&nbsp;options&nbsp;is.&nbsp;A&nbsp;&nbsp;class&nbsp;&nbsp;such&nbsp;&nbsp;as&nbsp;&nbsp;[^a]&nbsp;&nbsp;will<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;always&nbsp;match&nbsp;a&nbsp;newline.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;minus&nbsp;(hyphen)&nbsp;character&nbsp;can&nbsp;be&nbsp;used&nbsp;to&nbsp;specify&nbsp;a&nbsp;&nbsp;range<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;&nbsp;characters&nbsp;&nbsp;in&nbsp;&nbsp;a&nbsp;&nbsp;character&nbsp;&nbsp;class.&nbsp;&nbsp;For&nbsp;example,&nbsp;[d-m]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matches&nbsp;any&nbsp;letter&nbsp;between&nbsp;d&nbsp;and&nbsp;m,&nbsp;inclusive.&nbsp;&nbsp;If&nbsp;&nbsp;a&nbsp;&nbsp;minus<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;character&nbsp;&nbsp;is&nbsp;required&nbsp;in&nbsp;a&nbsp;class,&nbsp;it&nbsp;must&nbsp;be&nbsp;escaped&nbsp;with&nbsp;a<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;backslash&nbsp;or&nbsp;appear&nbsp;in&nbsp;a&nbsp;position&nbsp;where&nbsp;it&nbsp;cannot&nbsp;be&nbsp;&nbsp;inter-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;preted&nbsp;as&nbsp;indicating&nbsp;a&nbsp;range,&nbsp;typically&nbsp;as&nbsp;the&nbsp;first&nbsp;or&nbsp;last<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;character&nbsp;in&nbsp;the&nbsp;class.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;It&nbsp;is&nbsp;not&nbsp;possible&nbsp;to&nbsp;have&nbsp;the&nbsp;literal&nbsp;character&nbsp;"]"&nbsp;as&nbsp;&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;character&nbsp;&nbsp;of&nbsp;&nbsp;a&nbsp;&nbsp;range.&nbsp;&nbsp;A&nbsp;&nbsp;pattern&nbsp;such&nbsp;as&nbsp;[W-]46]&nbsp;is<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;interpreted&nbsp;as&nbsp;a&nbsp;class&nbsp;of&nbsp;two&nbsp;characters&nbsp;("W"&nbsp;and&nbsp;"-")&nbsp;&nbsp;fol-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lowed&nbsp;by&nbsp;a&nbsp;literal&nbsp;string&nbsp;"46]",&nbsp;so&nbsp;it&nbsp;would&nbsp;match&nbsp;"W46]"&nbsp;or<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"-46]".&nbsp;However,&nbsp;if&nbsp;the&nbsp;"]"&nbsp;is&nbsp;escaped&nbsp;with&nbsp;a&nbsp;&nbsp;backslash&nbsp;&nbsp;it<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;&nbsp;interpreted&nbsp;&nbsp;as&nbsp;&nbsp;the&nbsp;end&nbsp;of&nbsp;range,&nbsp;so&nbsp;[W-\]46]&nbsp;is&nbsp;inter-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;preted&nbsp;as&nbsp;a&nbsp;single&nbsp;class&nbsp;containing&nbsp;a&nbsp;range&nbsp;followed&nbsp;by&nbsp;&nbsp;two<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;separate&nbsp;characters.&nbsp;The&nbsp;octal&nbsp;or&nbsp;hexadecimal&nbsp;representation<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;"]"&nbsp;can&nbsp;also&nbsp;be&nbsp;used&nbsp;to&nbsp;end&nbsp;a&nbsp;range.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ranges&nbsp;operate&nbsp;in&nbsp;ASCII&nbsp;collating&nbsp;sequence.&nbsp;They&nbsp;can&nbsp;also&nbsp;be<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;used&nbsp;&nbsp;for&nbsp;&nbsp;characters&nbsp;&nbsp;specified&nbsp;&nbsp;numerically,&nbsp;&nbsp;for&nbsp;&nbsp;example<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[\000-\037].&nbsp;If&nbsp;a&nbsp;range&nbsp;that&nbsp;includes&nbsp;letters&nbsp;is&nbsp;&nbsp;used&nbsp;&nbsp;when<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;caseless&nbsp;&nbsp;matching&nbsp;&nbsp;is&nbsp;set,&nbsp;it&nbsp;matches&nbsp;the&nbsp;letters&nbsp;in&nbsp;either<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case.&nbsp;For&nbsp;example,&nbsp;[W-c]&nbsp;is&nbsp;equivalent&nbsp;&nbsp;to&nbsp;&nbsp;[][\^_`wxyzabc],<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matched&nbsp;&nbsp;caselessly,&nbsp;&nbsp;and&nbsp;&nbsp;if&nbsp;&nbsp;character&nbsp;tables&nbsp;for&nbsp;the&nbsp;"fr"<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;locale&nbsp;are&nbsp;in&nbsp;use,&nbsp;[\xc8-\xcb]&nbsp;matches&nbsp;accented&nbsp;E&nbsp;characters<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in&nbsp;both&nbsp;cases.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;character&nbsp;types&nbsp;\d,&nbsp;\D,&nbsp;\s,&nbsp;\S,&nbsp;&nbsp;\w,&nbsp;&nbsp;and&nbsp;&nbsp;\W&nbsp;&nbsp;may&nbsp;&nbsp;also<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;appear&nbsp;&nbsp;in&nbsp;&nbsp;a&nbsp;&nbsp;character&nbsp;&nbsp;class,&nbsp;and&nbsp;add&nbsp;the&nbsp;characters&nbsp;that<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;they&nbsp;match&nbsp;to&nbsp;the&nbsp;class.&nbsp;For&nbsp;example,&nbsp;[\dABCDEF]&nbsp;matches&nbsp;any<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hexadecimal&nbsp;&nbsp;digit.&nbsp;&nbsp;A&nbsp;&nbsp;circumflex&nbsp;&nbsp;can&nbsp;conveniently&nbsp;be&nbsp;used<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;the&nbsp;upper&nbsp;case&nbsp;character&nbsp;types&nbsp;to&nbsp;specify&nbsp;a&nbsp;&nbsp;more&nbsp;&nbsp;res-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tricted&nbsp;set&nbsp;of&nbsp;characters&nbsp;than&nbsp;the&nbsp;matching&nbsp;lower&nbsp;case&nbsp;type.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;example,&nbsp;the&nbsp;class&nbsp;[^\W_]&nbsp;matches&nbsp;any&nbsp;letter&nbsp;&nbsp;or&nbsp;&nbsp;digit,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;but&nbsp;not&nbsp;underscore.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;All&nbsp;non-alphameric&nbsp;characters&nbsp;other&nbsp;than&nbsp;\,&nbsp;&nbsp;-,&nbsp;&nbsp;^&nbsp;&nbsp;(at&nbsp;&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start)&nbsp;&nbsp;and&nbsp;&nbsp;the&nbsp;&nbsp;terminating&nbsp;]&nbsp;are&nbsp;non-special&nbsp;in&nbsp;character<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;classes,&nbsp;but&nbsp;it&nbsp;does&nbsp;no&nbsp;harm&nbsp;if&nbsp;they&nbsp;are&nbsp;escaped.<br>
<br>
<br>
<br>
VERTICAL&nbsp;BAR<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Vertical&nbsp;bar&nbsp;characters&nbsp;are&nbsp;&nbsp;used&nbsp;&nbsp;to&nbsp;&nbsp;separate&nbsp;&nbsp;alternative<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;patterns.&nbsp;For&nbsp;example,&nbsp;the&nbsp;pattern<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gilbert|sullivan<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matches&nbsp;either&nbsp;"gilbert"&nbsp;or&nbsp;"sullivan".&nbsp;Any&nbsp;number&nbsp;of&nbsp;alter-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;natives&nbsp;&nbsp;may&nbsp;&nbsp;appear,&nbsp;&nbsp;and&nbsp;an&nbsp;empty&nbsp;alternative&nbsp;is&nbsp;permitted<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(matching&nbsp;the&nbsp;empty&nbsp;string).&nbsp;&nbsp;&nbsp;The&nbsp;&nbsp;matching&nbsp;&nbsp;process&nbsp;&nbsp;tries<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;each&nbsp;&nbsp;alternative&nbsp;in&nbsp;turn,&nbsp;from&nbsp;left&nbsp;to&nbsp;right,&nbsp;and&nbsp;the&nbsp;first<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;one&nbsp;that&nbsp;succeeds&nbsp;is&nbsp;used.&nbsp;If&nbsp;the&nbsp;alternatives&nbsp;are&nbsp;within&nbsp;&nbsp;a<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subpattern&nbsp;&nbsp;(defined&nbsp;&nbsp;below),&nbsp;&nbsp;"succeeds"&nbsp;means&nbsp;matching&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rest&nbsp;of&nbsp;the&nbsp;main&nbsp;pattern&nbsp;as&nbsp;well&nbsp;as&nbsp;the&nbsp;alternative&nbsp;&nbsp;in&nbsp;&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subpattern.<br>
<br>
<br>
<br>
<br>
INTERNAL&nbsp;OPTION&nbsp;SETTING<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;settings&nbsp;of&nbsp;PCRE_CASELESS,&nbsp;PCRE_MULTILINE,&nbsp;&nbsp;PCRE_DOTALL,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;&nbsp;PCRE_EXTENDED&nbsp;can&nbsp;be&nbsp;changed&nbsp;from&nbsp;within&nbsp;the&nbsp;pattern&nbsp;by<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;sequence&nbsp;of&nbsp;Perl&nbsp;option&nbsp;letters&nbsp;enclosed&nbsp;between&nbsp;"(?"&nbsp;&nbsp;and<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;")".&nbsp;The&nbsp;option&nbsp;letters&nbsp;are<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;&nbsp;for&nbsp;PCRE_CASELESS<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m&nbsp;&nbsp;for&nbsp;PCRE_MULTILINE<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;&nbsp;for&nbsp;PCRE_DOTALL<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;&nbsp;for&nbsp;PCRE_EXTENDED<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;example,&nbsp;(?im)&nbsp;sets&nbsp;caseless,&nbsp;multiline&nbsp;matching.&nbsp;It&nbsp;&nbsp;is<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;also&nbsp;possible&nbsp;to&nbsp;unset&nbsp;these&nbsp;options&nbsp;by&nbsp;preceding&nbsp;the&nbsp;letter<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;a&nbsp;hyphen,&nbsp;and&nbsp;a&nbsp;combined&nbsp;setting&nbsp;and&nbsp;unsetting&nbsp;such&nbsp;&nbsp;as<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(?im-sx),&nbsp;&nbsp;which&nbsp;sets&nbsp;PCRE_CASELESS&nbsp;and&nbsp;PCRE_MULTILINE&nbsp;while<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsetting&nbsp;PCRE_DOTALL&nbsp;and&nbsp;PCRE_EXTENDED,&nbsp;is&nbsp;also&nbsp;&nbsp;permitted.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;&nbsp;a&nbsp;&nbsp;letter&nbsp;&nbsp;appears&nbsp;both&nbsp;before&nbsp;and&nbsp;after&nbsp;the&nbsp;hyphen,&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;option&nbsp;is&nbsp;unset.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;scope&nbsp;of&nbsp;these&nbsp;option&nbsp;changes&nbsp;depends&nbsp;on&nbsp;&nbsp;where&nbsp;&nbsp;in&nbsp;&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pattern&nbsp;&nbsp;the&nbsp;&nbsp;setting&nbsp;&nbsp;occurs.&nbsp;For&nbsp;settings&nbsp;that&nbsp;are&nbsp;outside<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;any&nbsp;subpattern&nbsp;(defined&nbsp;below),&nbsp;the&nbsp;effect&nbsp;is&nbsp;the&nbsp;same&nbsp;as&nbsp;if<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;&nbsp;options&nbsp;were&nbsp;set&nbsp;or&nbsp;unset&nbsp;at&nbsp;the&nbsp;start&nbsp;of&nbsp;matching.&nbsp;The<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;following&nbsp;patterns&nbsp;all&nbsp;behave&nbsp;in&nbsp;exactly&nbsp;the&nbsp;same&nbsp;way:<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(?i)abc<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a(?i)bc<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ab(?i)c<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;abc(?i)<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;which&nbsp;in&nbsp;turn&nbsp;is&nbsp;the&nbsp;same&nbsp;as&nbsp;compiling&nbsp;the&nbsp;pattern&nbsp;abc&nbsp;&nbsp;with<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCRE_CASELESS&nbsp;&nbsp;set.&nbsp;&nbsp;&nbsp;In&nbsp;&nbsp;other&nbsp;words,&nbsp;such&nbsp;"top&nbsp;level"&nbsp;set-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tings&nbsp;apply&nbsp;to&nbsp;the&nbsp;whole&nbsp;pattern&nbsp;&nbsp;(unless&nbsp;&nbsp;there&nbsp;&nbsp;are&nbsp;&nbsp;other<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;changes&nbsp;&nbsp;inside&nbsp;subpatterns).&nbsp;If&nbsp;there&nbsp;is&nbsp;more&nbsp;than&nbsp;one&nbsp;set-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ting&nbsp;of&nbsp;the&nbsp;same&nbsp;option&nbsp;at&nbsp;top&nbsp;level,&nbsp;the&nbsp;rightmost&nbsp;&nbsp;setting<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;used.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;an&nbsp;option&nbsp;change&nbsp;occurs&nbsp;inside&nbsp;a&nbsp;subpattern,&nbsp;&nbsp;the&nbsp;&nbsp;effect<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;&nbsp;different.&nbsp;&nbsp;This&nbsp;is&nbsp;a&nbsp;change&nbsp;of&nbsp;behaviour&nbsp;in&nbsp;Perl&nbsp;5.005.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An&nbsp;option&nbsp;change&nbsp;inside&nbsp;a&nbsp;subpattern&nbsp;affects&nbsp;only&nbsp;that&nbsp;&nbsp;part<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;the&nbsp;subpattern&nbsp;that&nbsp;follows&nbsp;it,&nbsp;so<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(a(?i)b)c<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matches&nbsp;&nbsp;abc&nbsp;&nbsp;and&nbsp;&nbsp;aBc&nbsp;&nbsp;and&nbsp;&nbsp;no&nbsp;&nbsp;other&nbsp;&nbsp;&nbsp;strings&nbsp;&nbsp;&nbsp;(assuming<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCRE_CASELESS&nbsp;&nbsp;is&nbsp;&nbsp;not&nbsp;used).&nbsp;&nbsp;By&nbsp;this&nbsp;means,&nbsp;options&nbsp;can&nbsp;be<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;made&nbsp;to&nbsp;have&nbsp;different&nbsp;settings&nbsp;in&nbsp;different&nbsp;&nbsp;parts&nbsp;&nbsp;of&nbsp;&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pattern.&nbsp;&nbsp;Any&nbsp;&nbsp;changes&nbsp;&nbsp;made&nbsp;&nbsp;in&nbsp;one&nbsp;alternative&nbsp;do&nbsp;carry&nbsp;on<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;into&nbsp;subsequent&nbsp;branches&nbsp;within&nbsp;&nbsp;the&nbsp;&nbsp;same&nbsp;&nbsp;subpattern.&nbsp;&nbsp;For<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;example,<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(a(?i)b|c)<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matches&nbsp;"ab",&nbsp;"aB",&nbsp;"c",&nbsp;and&nbsp;"C",&nbsp;even&nbsp;though&nbsp;when&nbsp;&nbsp;matching<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"C"&nbsp;the&nbsp;first&nbsp;branch&nbsp;is&nbsp;abandoned&nbsp;before&nbsp;the&nbsp;option&nbsp;setting.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;is&nbsp;because&nbsp;the&nbsp;effects&nbsp;of&nbsp;&nbsp;option&nbsp;&nbsp;settings&nbsp;&nbsp;happen&nbsp;&nbsp;at<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;compile&nbsp;&nbsp;time.&nbsp;There&nbsp;would&nbsp;be&nbsp;some&nbsp;very&nbsp;weird&nbsp;behaviour&nbsp;oth-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;erwise.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;PCRE-specific&nbsp;options&nbsp;PCRE_UNGREEDY&nbsp;and&nbsp;&nbsp;PCRE_EXTRA&nbsp;&nbsp;can<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;be&nbsp;changed&nbsp;in&nbsp;the&nbsp;same&nbsp;way&nbsp;as&nbsp;the&nbsp;Perl-compatible&nbsp;options&nbsp;by<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;using&nbsp;the&nbsp;characters&nbsp;U&nbsp;and&nbsp;X&nbsp;&nbsp;respectively.&nbsp;&nbsp;The&nbsp;&nbsp;(?X)&nbsp;&nbsp;flag<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setting&nbsp;&nbsp;is&nbsp;&nbsp;special&nbsp;in&nbsp;that&nbsp;it&nbsp;must&nbsp;always&nbsp;occur&nbsp;earlier&nbsp;in<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;pattern&nbsp;than&nbsp;any&nbsp;of&nbsp;the&nbsp;additional&nbsp;features&nbsp;it&nbsp;turns&nbsp;on,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;even&nbsp;when&nbsp;it&nbsp;is&nbsp;at&nbsp;top&nbsp;level.&nbsp;It&nbsp;is&nbsp;best&nbsp;put&nbsp;at&nbsp;the&nbsp;start.<br>
<br>
<br>
<br>
SUBPATTERNS<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Subpatterns&nbsp;are&nbsp;delimited&nbsp;by&nbsp;parentheses&nbsp;&nbsp;(round&nbsp;&nbsp;brackets),<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;which&nbsp;can&nbsp;be&nbsp;nested.&nbsp;&nbsp;Marking&nbsp;part&nbsp;of&nbsp;a&nbsp;pattern&nbsp;as&nbsp;a&nbsp;subpat-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tern&nbsp;does&nbsp;two&nbsp;things:<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.&nbsp;It&nbsp;localizes&nbsp;a&nbsp;set&nbsp;of&nbsp;alternatives.&nbsp;For&nbsp;example,&nbsp;the&nbsp;pat-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tern<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cat(aract|erpillar|)<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matches&nbsp;one&nbsp;of&nbsp;the&nbsp;words&nbsp;"cat",&nbsp;&nbsp;"cataract",&nbsp;&nbsp;or&nbsp;&nbsp;"caterpil-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lar".&nbsp;&nbsp;Without&nbsp;&nbsp;the&nbsp;&nbsp;parentheses,&nbsp;it&nbsp;would&nbsp;match&nbsp;"cataract",<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"erpillar"&nbsp;or&nbsp;the&nbsp;empty&nbsp;string.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.&nbsp;It&nbsp;sets&nbsp;up&nbsp;the&nbsp;subpattern&nbsp;as&nbsp;a&nbsp;capturing&nbsp;&nbsp;subpattern&nbsp;&nbsp;(as<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;defined&nbsp;&nbsp;above).&nbsp;&nbsp;&nbsp;When&nbsp;the&nbsp;whole&nbsp;pattern&nbsp;matches,&nbsp;that&nbsp;por-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tion&nbsp;of&nbsp;the&nbsp;subject&nbsp;string&nbsp;that&nbsp;matched&nbsp;&nbsp;the&nbsp;&nbsp;subpattern&nbsp;&nbsp;is<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;passed&nbsp;&nbsp;back&nbsp;&nbsp;to&nbsp;&nbsp;the&nbsp;&nbsp;caller&nbsp;&nbsp;via&nbsp;&nbsp;the&nbsp;&nbsp;<I
CLASS="emphasis"
>ovector</I
>&nbsp;argument&nbsp;of<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B
CLASS="function"
>pcre_exec()</B
>.&nbsp;Opening&nbsp;parentheses&nbsp;are&nbsp;counted&nbsp;&nbsp;from&nbsp;&nbsp;left&nbsp;&nbsp;to<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;right&nbsp;(starting&nbsp;from&nbsp;1)&nbsp;to&nbsp;obtain&nbsp;the&nbsp;numbers&nbsp;of&nbsp;the&nbsp;captur-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ing&nbsp;subpatterns.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;example,&nbsp;if&nbsp;the&nbsp;string&nbsp;"the&nbsp;red&nbsp;king"&nbsp;is&nbsp;matched&nbsp;against<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;pattern<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;((red|white)&nbsp;(king|queen))<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;captured&nbsp;substrings&nbsp;are&nbsp;"red&nbsp;king",&nbsp;"red",&nbsp;&nbsp;and&nbsp;&nbsp;"king",<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;are&nbsp;numbered&nbsp;1,&nbsp;2,&nbsp;and&nbsp;3.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;fact&nbsp;that&nbsp;plain&nbsp;parentheses&nbsp;fulfil&nbsp;two&nbsp;functions&nbsp;is&nbsp;&nbsp;not<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;always&nbsp;&nbsp;helpful.&nbsp;&nbsp;There&nbsp;are&nbsp;often&nbsp;times&nbsp;when&nbsp;a&nbsp;grouping&nbsp;sub-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pattern&nbsp;is&nbsp;required&nbsp;without&nbsp;a&nbsp;capturing&nbsp;requirement.&nbsp;&nbsp;If&nbsp;&nbsp;an<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;opening&nbsp;parenthesis&nbsp;is&nbsp;followed&nbsp;by&nbsp;"?:",&nbsp;the&nbsp;subpattern&nbsp;does<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;not&nbsp;do&nbsp;any&nbsp;capturing,&nbsp;and&nbsp;is&nbsp;not&nbsp;counted&nbsp;when&nbsp;computing&nbsp;&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;number&nbsp;of&nbsp;any&nbsp;subsequent&nbsp;capturing&nbsp;subpatterns.&nbsp;For&nbsp;example,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;the&nbsp;string&nbsp;"the&nbsp;&nbsp;white&nbsp;&nbsp;queen"&nbsp;&nbsp;is&nbsp;&nbsp;matched&nbsp;&nbsp;against&nbsp;&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pattern<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;((?:red|white)&nbsp;(king|queen))<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;captured&nbsp;substrings&nbsp;are&nbsp;"white&nbsp;queen"&nbsp;and&nbsp;&nbsp;"queen",&nbsp;&nbsp;and<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;are&nbsp;&nbsp;numbered&nbsp;&nbsp;1&nbsp;&nbsp;and&nbsp;2.&nbsp;The&nbsp;maximum&nbsp;number&nbsp;of&nbsp;captured&nbsp;sub-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strings&nbsp;is&nbsp;99,&nbsp;and&nbsp;the&nbsp;maximum&nbsp;number&nbsp;&nbsp;of&nbsp;&nbsp;all&nbsp;&nbsp;subpatterns,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;both&nbsp;capturing&nbsp;and&nbsp;non-capturing,&nbsp;is&nbsp;200.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;As&nbsp;a&nbsp;&nbsp;convenient&nbsp;&nbsp;shorthand,&nbsp;&nbsp;if&nbsp;&nbsp;any&nbsp;&nbsp;option&nbsp;&nbsp;settings&nbsp;&nbsp;are<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;required&nbsp;&nbsp;at&nbsp;&nbsp;the&nbsp;&nbsp;start&nbsp;&nbsp;of&nbsp;a&nbsp;non-capturing&nbsp;subpattern,&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;option&nbsp;letters&nbsp;may&nbsp;appear&nbsp;between&nbsp;the&nbsp;"?"&nbsp;and&nbsp;the&nbsp;":".&nbsp;&nbsp;Thus<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;two&nbsp;patterns<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(?i:saturday|sunday)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(?:(?i)saturday|sunday)<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;match&nbsp;exactly&nbsp;the&nbsp;same&nbsp;set&nbsp;of&nbsp;strings.&nbsp;&nbsp;Because&nbsp;&nbsp;alternative<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;branches&nbsp;&nbsp;are&nbsp;&nbsp;tried&nbsp;from&nbsp;left&nbsp;to&nbsp;right,&nbsp;and&nbsp;options&nbsp;are&nbsp;not<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reset&nbsp;until&nbsp;the&nbsp;end&nbsp;of&nbsp;the&nbsp;subpattern&nbsp;is&nbsp;reached,&nbsp;an&nbsp;&nbsp;option<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setting&nbsp;&nbsp;in&nbsp;&nbsp;one&nbsp;&nbsp;branch&nbsp;does&nbsp;affect&nbsp;subsequent&nbsp;branches,&nbsp;so<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;above&nbsp;patterns&nbsp;match&nbsp;"SUNDAY"&nbsp;as&nbsp;well&nbsp;as&nbsp;"Saturday".<br>
<br>
<br>
<br>
REPETITION<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Repetition&nbsp;is&nbsp;specified&nbsp;by&nbsp;quantifiers,&nbsp;which&nbsp;can&nbsp;follow&nbsp;any<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;the&nbsp;following&nbsp;items:<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;single&nbsp;character,&nbsp;possibly&nbsp;escaped<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;.&nbsp;metacharacter<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;character&nbsp;class<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;back&nbsp;reference&nbsp;(see&nbsp;next&nbsp;section)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;parenthesized&nbsp;subpattern&nbsp;(unless&nbsp;it&nbsp;is&nbsp;&nbsp;an&nbsp;&nbsp;assertion&nbsp;&nbsp;-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;see&nbsp;below)<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;general&nbsp;repetition&nbsp;quantifier&nbsp;specifies&nbsp;&nbsp;a&nbsp;&nbsp;minimum&nbsp;&nbsp;and<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maximum&nbsp;&nbsp;number&nbsp;&nbsp;of&nbsp;&nbsp;permitted&nbsp;&nbsp;matches,&nbsp;&nbsp;by&nbsp;&nbsp;giving&nbsp;the&nbsp;two<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numbers&nbsp;in&nbsp;curly&nbsp;brackets&nbsp;(braces),&nbsp;separated&nbsp;&nbsp;by&nbsp;&nbsp;a&nbsp;&nbsp;comma.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;&nbsp;numbers&nbsp;&nbsp;must&nbsp;be&nbsp;less&nbsp;than&nbsp;65536,&nbsp;and&nbsp;the&nbsp;first&nbsp;must&nbsp;be<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;less&nbsp;than&nbsp;or&nbsp;equal&nbsp;to&nbsp;the&nbsp;second.&nbsp;For&nbsp;example:<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;z{2,4}<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matches&nbsp;"zz",&nbsp;"zzz",&nbsp;or&nbsp;"zzzz".&nbsp;A&nbsp;closing&nbsp;brace&nbsp;on&nbsp;&nbsp;its&nbsp;&nbsp;own<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;not&nbsp;a&nbsp;special&nbsp;character.&nbsp;If&nbsp;the&nbsp;second&nbsp;number&nbsp;is&nbsp;omitted,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;but&nbsp;the&nbsp;comma&nbsp;is&nbsp;present,&nbsp;there&nbsp;is&nbsp;no&nbsp;upper&nbsp;&nbsp;limit;&nbsp;&nbsp;if&nbsp;&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;second&nbsp;number&nbsp;and&nbsp;the&nbsp;comma&nbsp;are&nbsp;both&nbsp;omitted,&nbsp;the&nbsp;quantifier<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;specifies&nbsp;an&nbsp;exact&nbsp;number&nbsp;of&nbsp;required&nbsp;matches.&nbsp;Thus<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[aeiou]{3,}<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matches&nbsp;at&nbsp;least&nbsp;3&nbsp;successive&nbsp;vowels,&nbsp;&nbsp;but&nbsp;&nbsp;may&nbsp;&nbsp;match&nbsp;&nbsp;many<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;more,&nbsp;while<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\d{8}<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matches&nbsp;exactly&nbsp;8&nbsp;digits.&nbsp;&nbsp;An&nbsp;&nbsp;opening&nbsp;&nbsp;curly&nbsp;&nbsp;bracket&nbsp;&nbsp;that<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;appears&nbsp;&nbsp;in&nbsp;a&nbsp;position&nbsp;where&nbsp;a&nbsp;quantifier&nbsp;is&nbsp;not&nbsp;allowed,&nbsp;or<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;one&nbsp;that&nbsp;does&nbsp;not&nbsp;match&nbsp;the&nbsp;syntax&nbsp;of&nbsp;a&nbsp;quantifier,&nbsp;is&nbsp;taken<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;as&nbsp;&nbsp;a&nbsp;literal&nbsp;character.&nbsp;For&nbsp;example,&nbsp;{,6}&nbsp;is&nbsp;not&nbsp;a&nbsp;quantif-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ier,&nbsp;but&nbsp;a&nbsp;literal&nbsp;string&nbsp;of&nbsp;four&nbsp;characters.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;quantifier&nbsp;{0}&nbsp;is&nbsp;permitted,&nbsp;causing&nbsp;the&nbsp;&nbsp;expression&nbsp;&nbsp;to<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;behave&nbsp;&nbsp;as&nbsp;&nbsp;if&nbsp;the&nbsp;previous&nbsp;item&nbsp;and&nbsp;the&nbsp;quantifier&nbsp;were&nbsp;not<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;present.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;convenience&nbsp;(and&nbsp;&nbsp;historical&nbsp;&nbsp;compatibility)&nbsp;&nbsp;the&nbsp;&nbsp;three<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;most&nbsp;common&nbsp;quantifiers&nbsp;have&nbsp;single-character&nbsp;abbreviations:<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;equivalent&nbsp;to&nbsp;{0,}<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;equivalent&nbsp;to&nbsp;{1,}<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;equivalent&nbsp;to&nbsp;{0,1}<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;It&nbsp;is&nbsp;possible&nbsp;to&nbsp;construct&nbsp;infinite&nbsp;loops&nbsp;&nbsp;by&nbsp;&nbsp;following&nbsp;&nbsp;a<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subpattern&nbsp;&nbsp;that&nbsp;&nbsp;can&nbsp;&nbsp;match&nbsp;no&nbsp;characters&nbsp;with&nbsp;a&nbsp;quantifier<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;that&nbsp;has&nbsp;no&nbsp;upper&nbsp;limit,&nbsp;for&nbsp;example:<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(a?)*<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Earlier&nbsp;versions&nbsp;of&nbsp;Perl&nbsp;and&nbsp;PCRE&nbsp;used&nbsp;to&nbsp;give&nbsp;an&nbsp;&nbsp;error&nbsp;&nbsp;at<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;compile&nbsp;&nbsp;time&nbsp;&nbsp;for&nbsp;such&nbsp;patterns.&nbsp;However,&nbsp;because&nbsp;there&nbsp;are<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cases&nbsp;where&nbsp;this&nbsp;&nbsp;can&nbsp;&nbsp;be&nbsp;&nbsp;useful,&nbsp;&nbsp;such&nbsp;&nbsp;patterns&nbsp;&nbsp;are&nbsp;&nbsp;now<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;accepted,&nbsp;&nbsp;but&nbsp;&nbsp;if&nbsp;&nbsp;any&nbsp;repetition&nbsp;of&nbsp;the&nbsp;subpattern&nbsp;does&nbsp;in<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fact&nbsp;match&nbsp;no&nbsp;characters,&nbsp;the&nbsp;loop&nbsp;is&nbsp;forcibly&nbsp;broken.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;By&nbsp;default,&nbsp;the&nbsp;quantifiers&nbsp;&nbsp;are&nbsp;&nbsp;"greedy",&nbsp;&nbsp;that&nbsp;&nbsp;is,&nbsp;&nbsp;they<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;match&nbsp;&nbsp;as&nbsp;much&nbsp;as&nbsp;possible&nbsp;(up&nbsp;to&nbsp;the&nbsp;maximum&nbsp;number&nbsp;of&nbsp;per-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mitted&nbsp;times),&nbsp;without&nbsp;causing&nbsp;the&nbsp;rest&nbsp;of&nbsp;&nbsp;the&nbsp;&nbsp;pattern&nbsp;&nbsp;to<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fail.&nbsp;The&nbsp;classic&nbsp;example&nbsp;of&nbsp;where&nbsp;this&nbsp;gives&nbsp;problems&nbsp;is&nbsp;in<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trying&nbsp;to&nbsp;match&nbsp;comments&nbsp;in&nbsp;C&nbsp;programs.&nbsp;These&nbsp;appear&nbsp;between<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;&nbsp;sequences&nbsp;/*&nbsp;and&nbsp;*/&nbsp;and&nbsp;within&nbsp;the&nbsp;sequence,&nbsp;individual<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;and&nbsp;/&nbsp;characters&nbsp;may&nbsp;appear.&nbsp;An&nbsp;attempt&nbsp;to&nbsp;&nbsp;match&nbsp;&nbsp;C&nbsp;&nbsp;com-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ments&nbsp;by&nbsp;applying&nbsp;the&nbsp;pattern<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/\*.*\*/<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;to&nbsp;the&nbsp;string<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;first&nbsp;command&nbsp;*/&nbsp;&nbsp;not&nbsp;comment&nbsp;&nbsp;/*&nbsp;second&nbsp;comment&nbsp;*/<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fails,&nbsp;because&nbsp;it&nbsp;matches&nbsp;&nbsp;the&nbsp;&nbsp;entire&nbsp;&nbsp;string&nbsp;&nbsp;due&nbsp;&nbsp;to&nbsp;&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;greediness&nbsp;of&nbsp;the&nbsp;.*&nbsp;&nbsp;item.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;However,&nbsp;if&nbsp;a&nbsp;quantifier&nbsp;is&nbsp;followed&nbsp;&nbsp;by&nbsp;&nbsp;a&nbsp;&nbsp;question&nbsp;&nbsp;mark,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then&nbsp;it&nbsp;ceases&nbsp;to&nbsp;be&nbsp;greedy,&nbsp;and&nbsp;instead&nbsp;matches&nbsp;the&nbsp;minimum<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;number&nbsp;of&nbsp;times&nbsp;possible,&nbsp;so&nbsp;the&nbsp;pattern<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/\*.*?\*/<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;does&nbsp;the&nbsp;right&nbsp;thing&nbsp;with&nbsp;the&nbsp;C&nbsp;comments.&nbsp;The&nbsp;meaning&nbsp;of&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;various&nbsp;&nbsp;quantifiers&nbsp;is&nbsp;not&nbsp;otherwise&nbsp;changed,&nbsp;just&nbsp;the&nbsp;pre-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ferred&nbsp;number&nbsp;of&nbsp;matches.&nbsp;&nbsp;Do&nbsp;not&nbsp;confuse&nbsp;this&nbsp;use&nbsp;of&nbsp;&nbsp;ques-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tion&nbsp;&nbsp;mark&nbsp;&nbsp;with&nbsp;&nbsp;its&nbsp;&nbsp;use&nbsp;as&nbsp;a&nbsp;quantifier&nbsp;in&nbsp;its&nbsp;own&nbsp;right.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Because&nbsp;it&nbsp;has&nbsp;two&nbsp;uses,&nbsp;it&nbsp;can&nbsp;sometimes&nbsp;appear&nbsp;doubled,&nbsp;as<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\d??\d<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;which&nbsp;matches&nbsp;one&nbsp;digit&nbsp;by&nbsp;preference,&nbsp;but&nbsp;can&nbsp;match&nbsp;two&nbsp;&nbsp;if<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;that&nbsp;is&nbsp;the&nbsp;only&nbsp;way&nbsp;the&nbsp;rest&nbsp;of&nbsp;the&nbsp;pattern&nbsp;matches.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;the&nbsp;PCRE_UNGREEDY&nbsp;option&nbsp;is&nbsp;set&nbsp;(an&nbsp;option&nbsp;which&nbsp;&nbsp;is&nbsp;&nbsp;not<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;available&nbsp;&nbsp;in&nbsp;&nbsp;Perl)&nbsp;&nbsp;then&nbsp;the&nbsp;quantifiers&nbsp;are&nbsp;not&nbsp;greedy&nbsp;by<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default,&nbsp;but&nbsp;individual&nbsp;ones&nbsp;can&nbsp;be&nbsp;made&nbsp;greedy&nbsp;by&nbsp;following<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;them&nbsp;&nbsp;with&nbsp;&nbsp;a&nbsp;&nbsp;question&nbsp;mark.&nbsp;In&nbsp;other&nbsp;words,&nbsp;it&nbsp;inverts&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default&nbsp;behaviour.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;When&nbsp;a&nbsp;parenthesized&nbsp;subpattern&nbsp;is&nbsp;quantified&nbsp;with&nbsp;a&nbsp;minimum<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;repeat&nbsp;&nbsp;count&nbsp;&nbsp;that&nbsp;is&nbsp;greater&nbsp;than&nbsp;1&nbsp;or&nbsp;with&nbsp;a&nbsp;limited&nbsp;max-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imum,&nbsp;more&nbsp;store&nbsp;is&nbsp;required&nbsp;for&nbsp;the&nbsp;&nbsp;compiled&nbsp;&nbsp;pattern,&nbsp;&nbsp;in<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proportion&nbsp;to&nbsp;the&nbsp;size&nbsp;of&nbsp;the&nbsp;minimum&nbsp;or&nbsp;maximum.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;a&nbsp;pattern&nbsp;starts&nbsp;with&nbsp;.*&nbsp;or&nbsp;&nbsp;.{0,}&nbsp;&nbsp;and&nbsp;&nbsp;the&nbsp;&nbsp;PCRE_DOTALL<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;option&nbsp;(equivalent&nbsp;to&nbsp;Perl's&nbsp;/s)&nbsp;is&nbsp;set,&nbsp;thus&nbsp;allowing&nbsp;the&nbsp;.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;to&nbsp;match&nbsp;newlines,&nbsp;then&nbsp;the&nbsp;pattern&nbsp;is&nbsp;implicitly&nbsp;&nbsp;anchored,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;because&nbsp;whatever&nbsp;follows&nbsp;will&nbsp;be&nbsp;tried&nbsp;against&nbsp;every&nbsp;charac-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ter&nbsp;position&nbsp;in&nbsp;the&nbsp;subject&nbsp;string,&nbsp;so&nbsp;there&nbsp;is&nbsp;no&nbsp;point&nbsp;&nbsp;in<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;retrying&nbsp;&nbsp;the&nbsp;overall&nbsp;match&nbsp;at&nbsp;any&nbsp;position&nbsp;after&nbsp;the&nbsp;first.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCRE&nbsp;treats&nbsp;such&nbsp;a&nbsp;pattern&nbsp;as&nbsp;though&nbsp;it&nbsp;were&nbsp;preceded&nbsp;by&nbsp;\A.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;In&nbsp;&nbsp;cases&nbsp;where&nbsp;it&nbsp;is&nbsp;known&nbsp;that&nbsp;the&nbsp;subject&nbsp;string&nbsp;contains<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;no&nbsp;newlines,&nbsp;it&nbsp;is&nbsp;worth&nbsp;setting&nbsp;PCRE_DOTALL&nbsp;when&nbsp;&nbsp;the&nbsp;&nbsp;pat-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tern&nbsp;begins&nbsp;with&nbsp;.*&nbsp;in&nbsp;order&nbsp;to&nbsp;obtain&nbsp;this&nbsp;optimization,&nbsp;or<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alternatively&nbsp;using&nbsp;^&nbsp;to&nbsp;indicate&nbsp;anchoring&nbsp;explicitly.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;When&nbsp;a&nbsp;capturing&nbsp;subpattern&nbsp;is&nbsp;repeated,&nbsp;the&nbsp;value&nbsp;&nbsp;captured<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;the&nbsp;substring&nbsp;that&nbsp;matched&nbsp;the&nbsp;final&nbsp;iteration.&nbsp;For&nbsp;exam-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ple,&nbsp;after<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(tweedle[dume]{3}\s*)+<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;has&nbsp;matched&nbsp;"tweedledum&nbsp;tweedledee"&nbsp;the&nbsp;value&nbsp;&nbsp;of&nbsp;&nbsp;the&nbsp;&nbsp;cap-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tured&nbsp;&nbsp;substring&nbsp;&nbsp;is&nbsp;&nbsp;"tweedledee".&nbsp;&nbsp;However,&nbsp;&nbsp;if&nbsp;&nbsp;there&nbsp;are<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nested&nbsp;capturing&nbsp;&nbsp;subpatterns,&nbsp;&nbsp;the&nbsp;&nbsp;corresponding&nbsp;&nbsp;captured<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;values&nbsp;&nbsp;may&nbsp;&nbsp;have&nbsp;been&nbsp;set&nbsp;in&nbsp;previous&nbsp;iterations.&nbsp;For&nbsp;exam-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ple,&nbsp;after<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/(a|(b))+/<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matches&nbsp;"aba"&nbsp;the&nbsp;value&nbsp;of&nbsp;the&nbsp;second&nbsp;captured&nbsp;substring&nbsp;&nbsp;is<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"b".<br>
<br>
<br>
<br>
BACK&nbsp;REFERENCES<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Outside&nbsp;a&nbsp;character&nbsp;class,&nbsp;a&nbsp;backslash&nbsp;followed&nbsp;by&nbsp;&nbsp;a&nbsp;&nbsp;digit<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;greater&nbsp;&nbsp;than&nbsp;&nbsp;0&nbsp;&nbsp;(and&nbsp;&nbsp;possibly&nbsp;&nbsp;further&nbsp;&nbsp;digits)&nbsp;is&nbsp;a&nbsp;back<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reference&nbsp;to&nbsp;a&nbsp;capturing&nbsp;subpattern&nbsp;&nbsp;earlier&nbsp;&nbsp;(i.e.&nbsp;&nbsp;to&nbsp;&nbsp;its<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;left)&nbsp;&nbsp;in&nbsp;&nbsp;the&nbsp;&nbsp;pattern,&nbsp;&nbsp;provided&nbsp;there&nbsp;have&nbsp;been&nbsp;that&nbsp;many<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;previous&nbsp;capturing&nbsp;left&nbsp;parentheses.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;However,&nbsp;if&nbsp;the&nbsp;decimal&nbsp;number&nbsp;following&nbsp;&nbsp;the&nbsp;&nbsp;backslash&nbsp;&nbsp;is<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;less&nbsp;&nbsp;than&nbsp;&nbsp;10,&nbsp;&nbsp;it&nbsp;is&nbsp;always&nbsp;taken&nbsp;as&nbsp;a&nbsp;back&nbsp;reference,&nbsp;and<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;causes&nbsp;an&nbsp;error&nbsp;only&nbsp;if&nbsp;there&nbsp;are&nbsp;not&nbsp;&nbsp;that&nbsp;&nbsp;many&nbsp;&nbsp;capturing<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;left&nbsp;&nbsp;parentheses&nbsp;in&nbsp;the&nbsp;entire&nbsp;pattern.&nbsp;In&nbsp;other&nbsp;words,&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parentheses&nbsp;that&nbsp;are&nbsp;referenced&nbsp;need&nbsp;not&nbsp;be&nbsp;to&nbsp;the&nbsp;&nbsp;left&nbsp;&nbsp;of<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;&nbsp;reference&nbsp;&nbsp;for&nbsp;&nbsp;numbers&nbsp;&nbsp;less&nbsp;&nbsp;than&nbsp;10.&nbsp;See&nbsp;the&nbsp;section<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;entitled&nbsp;"Backslash"&nbsp;above&nbsp;for&nbsp;further&nbsp;details&nbsp;of&nbsp;&nbsp;the&nbsp;&nbsp;han-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dling&nbsp;of&nbsp;digits&nbsp;following&nbsp;a&nbsp;backslash.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;back&nbsp;reference&nbsp;matches&nbsp;whatever&nbsp;actually&nbsp;matched&nbsp;the&nbsp;&nbsp;cap-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;turing&nbsp;subpattern&nbsp;in&nbsp;the&nbsp;current&nbsp;subject&nbsp;string,&nbsp;rather&nbsp;than<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;anything&nbsp;matching&nbsp;the&nbsp;subpattern&nbsp;itself.&nbsp;So&nbsp;the&nbsp;pattern<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(sens|respons)e&nbsp;and&nbsp;\1ibility<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matches&nbsp;"sense&nbsp;and&nbsp;sensibility"&nbsp;and&nbsp;"response&nbsp;and&nbsp;&nbsp;responsi-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bility",&nbsp;&nbsp;but&nbsp;&nbsp;not&nbsp;&nbsp;"sense&nbsp;&nbsp;and&nbsp;&nbsp;responsibility".&nbsp;If&nbsp;caseful<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matching&nbsp;is&nbsp;in&nbsp;force&nbsp;at&nbsp;the&nbsp;time&nbsp;of&nbsp;the&nbsp;back&nbsp;reference,&nbsp;then<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;case&nbsp;of&nbsp;letters&nbsp;is&nbsp;relevant.&nbsp;For&nbsp;example,<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((?i)rah)\s+\1<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matches&nbsp;"rah&nbsp;rah"&nbsp;and&nbsp;"RAH&nbsp;RAH",&nbsp;but&nbsp;&nbsp;not&nbsp;&nbsp;"RAH&nbsp;&nbsp;rah",&nbsp;&nbsp;even<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;though&nbsp;&nbsp;the&nbsp;&nbsp;original&nbsp;&nbsp;capturing&nbsp;subpattern&nbsp;is&nbsp;matched&nbsp;case-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lessly.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;There&nbsp;may&nbsp;be&nbsp;more&nbsp;than&nbsp;one&nbsp;back&nbsp;reference&nbsp;to&nbsp;the&nbsp;&nbsp;same&nbsp;&nbsp;sub-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pattern.&nbsp;&nbsp;If&nbsp;&nbsp;a&nbsp;&nbsp;subpattern&nbsp;&nbsp;has&nbsp;not&nbsp;actually&nbsp;been&nbsp;used&nbsp;in&nbsp;a<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;particular&nbsp;match,&nbsp;then&nbsp;any&nbsp;&nbsp;back&nbsp;&nbsp;references&nbsp;&nbsp;to&nbsp;&nbsp;it&nbsp;&nbsp;always<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fail.&nbsp;For&nbsp;example,&nbsp;the&nbsp;pattern<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(a|(bc))\2<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;always&nbsp;fails&nbsp;if&nbsp;it&nbsp;starts&nbsp;to&nbsp;match&nbsp;&nbsp;"a"&nbsp;&nbsp;rather&nbsp;&nbsp;than&nbsp;&nbsp;"bc".<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Because&nbsp;&nbsp;there&nbsp;&nbsp;may&nbsp;&nbsp;be&nbsp;up&nbsp;to&nbsp;99&nbsp;back&nbsp;references,&nbsp;all&nbsp;digits<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;following&nbsp;the&nbsp;backslash&nbsp;are&nbsp;taken&nbsp;as&nbsp;&nbsp;part&nbsp;&nbsp;of&nbsp;&nbsp;a&nbsp;&nbsp;potential<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;back&nbsp;reference&nbsp;number.&nbsp;If&nbsp;the&nbsp;pattern&nbsp;continues&nbsp;with&nbsp;a&nbsp;digit<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;character,&nbsp;then&nbsp;some&nbsp;delimiter&nbsp;must&nbsp;be&nbsp;used&nbsp;to&nbsp;terminate&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;back&nbsp;reference.&nbsp;If&nbsp;the&nbsp;PCRE_EXTENDED&nbsp;option&nbsp;is&nbsp;set,&nbsp;this&nbsp;can<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;be&nbsp;whitespace.&nbsp;&nbsp;Otherwise&nbsp;an&nbsp;empty&nbsp;comment&nbsp;can&nbsp;be&nbsp;used.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;back&nbsp;reference&nbsp;that&nbsp;occurs&nbsp;inside&nbsp;the&nbsp;parentheses&nbsp;to&nbsp;which<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;it&nbsp;&nbsp;refers&nbsp;&nbsp;fails&nbsp;when&nbsp;the&nbsp;subpattern&nbsp;is&nbsp;first&nbsp;used,&nbsp;so,&nbsp;for<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;example,&nbsp;(a\1)&nbsp;never&nbsp;matches.&nbsp;&nbsp;However,&nbsp;such&nbsp;references&nbsp;&nbsp;can<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;be&nbsp;useful&nbsp;inside&nbsp;repeated&nbsp;subpatterns.&nbsp;For&nbsp;example,&nbsp;the&nbsp;pat-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tern<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(a|b\1)+<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matches&nbsp;any&nbsp;number&nbsp;of&nbsp;"a"s&nbsp;and&nbsp;also&nbsp;"aba",&nbsp;"ababaa"&nbsp;etc.&nbsp;&nbsp;At<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;each&nbsp;iteration&nbsp;of&nbsp;the&nbsp;subpattern,&nbsp;the&nbsp;back&nbsp;reference&nbsp;matches<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;character&nbsp;string&nbsp;corresponding&nbsp;to&nbsp;&nbsp;the&nbsp;&nbsp;previous&nbsp;&nbsp;itera-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tion.&nbsp;&nbsp;In&nbsp;&nbsp;order&nbsp;&nbsp;for&nbsp;this&nbsp;to&nbsp;work,&nbsp;the&nbsp;pattern&nbsp;must&nbsp;be&nbsp;such<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;that&nbsp;the&nbsp;first&nbsp;iteration&nbsp;does&nbsp;not&nbsp;need&nbsp;&nbsp;to&nbsp;&nbsp;match&nbsp;&nbsp;the&nbsp;&nbsp;back<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reference.&nbsp;&nbsp;This&nbsp;&nbsp;can&nbsp;&nbsp;be&nbsp;&nbsp;done&nbsp;using&nbsp;alternation,&nbsp;as&nbsp;in&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;example&nbsp;above,&nbsp;or&nbsp;by&nbsp;a&nbsp;quantifier&nbsp;with&nbsp;a&nbsp;minimum&nbsp;of&nbsp;zero.<br>
<br>
<br>
<br>
ASSERTIONS<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An&nbsp;assertion&nbsp;is&nbsp;&nbsp;a&nbsp;&nbsp;test&nbsp;&nbsp;on&nbsp;&nbsp;the&nbsp;&nbsp;characters&nbsp;&nbsp;following&nbsp;&nbsp;or<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;preceding&nbsp;&nbsp;the&nbsp;current&nbsp;matching&nbsp;point&nbsp;that&nbsp;does&nbsp;not&nbsp;actually<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;consume&nbsp;any&nbsp;characters.&nbsp;The&nbsp;simple&nbsp;assertions&nbsp;coded&nbsp;&nbsp;as&nbsp;&nbsp;\b,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\B,&nbsp;&nbsp;\A,&nbsp;&nbsp;\Z,&nbsp;&nbsp;\z,&nbsp;^&nbsp;and&nbsp;$&nbsp;are&nbsp;described&nbsp;above.&nbsp;More&nbsp;compli-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cated&nbsp;assertions&nbsp;are&nbsp;coded&nbsp;as&nbsp;&nbsp;subpatterns.&nbsp;&nbsp;There&nbsp;&nbsp;are&nbsp;&nbsp;two<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kinds:&nbsp;&nbsp;those&nbsp;that&nbsp;look&nbsp;ahead&nbsp;of&nbsp;the&nbsp;current&nbsp;position&nbsp;in&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subject&nbsp;string,&nbsp;and&nbsp;those&nbsp;that&nbsp;look&nbsp;behind&nbsp;it.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An&nbsp;assertion&nbsp;subpattern&nbsp;is&nbsp;matched&nbsp;in&nbsp;the&nbsp;normal&nbsp;way,&nbsp;except<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;that&nbsp;&nbsp;it&nbsp;&nbsp;does&nbsp;not&nbsp;cause&nbsp;the&nbsp;current&nbsp;matching&nbsp;position&nbsp;to&nbsp;be<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;changed.&nbsp;Lookahead&nbsp;assertions&nbsp;start&nbsp;with&nbsp;&nbsp;(?=&nbsp;&nbsp;for&nbsp;&nbsp;positive<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assertions&nbsp;and&nbsp;(?!&nbsp;for&nbsp;negative&nbsp;assertions.&nbsp;For&nbsp;example,<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\w+(?=;)<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matches&nbsp;a&nbsp;word&nbsp;followed&nbsp;by&nbsp;a&nbsp;semicolon,&nbsp;but&nbsp;does&nbsp;not&nbsp;include<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;semicolon&nbsp;in&nbsp;the&nbsp;match,&nbsp;and<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foo(?!bar)<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matches&nbsp;any&nbsp;occurrence&nbsp;of&nbsp;"foo"&nbsp;&nbsp;that&nbsp;&nbsp;is&nbsp;&nbsp;not&nbsp;&nbsp;followed&nbsp;&nbsp;by<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"bar".&nbsp;Note&nbsp;that&nbsp;the&nbsp;apparently&nbsp;similar&nbsp;pattern<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(?!foo)bar<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;does&nbsp;not&nbsp;find&nbsp;an&nbsp;occurrence&nbsp;of&nbsp;"bar"&nbsp;&nbsp;that&nbsp;&nbsp;is&nbsp;&nbsp;preceded&nbsp;&nbsp;by<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;something&nbsp;other&nbsp;than&nbsp;"foo";&nbsp;it&nbsp;finds&nbsp;any&nbsp;occurrence&nbsp;of&nbsp;"bar"<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;whatsoever,&nbsp;because&nbsp;the&nbsp;assertion&nbsp;&nbsp;(?!foo)&nbsp;&nbsp;is&nbsp;&nbsp;always&nbsp;&nbsp;true<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;when&nbsp;&nbsp;the&nbsp;&nbsp;next&nbsp;&nbsp;three&nbsp;&nbsp;characters&nbsp;&nbsp;are&nbsp;&nbsp;"bar".&nbsp;A&nbsp;lookbehind<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assertion&nbsp;is&nbsp;needed&nbsp;to&nbsp;achieve&nbsp;this&nbsp;effect.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Lookbehind&nbsp;assertions&nbsp;start&nbsp;with&nbsp;(?&#60;=&nbsp;&nbsp;for&nbsp;&nbsp;positive&nbsp;&nbsp;asser-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tions&nbsp;and&nbsp;(?&#60;!&nbsp;for&nbsp;negative&nbsp;assertions.&nbsp;For&nbsp;example,<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(?&#60;!foo)bar<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;does&nbsp;find&nbsp;an&nbsp;occurrence&nbsp;of&nbsp;"bar"&nbsp;that&nbsp;&nbsp;is&nbsp;&nbsp;not&nbsp;&nbsp;preceded&nbsp;&nbsp;by<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"foo".&nbsp;The&nbsp;contents&nbsp;of&nbsp;a&nbsp;lookbehind&nbsp;assertion&nbsp;are&nbsp;restricted<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;such&nbsp;that&nbsp;all&nbsp;the&nbsp;strings&nbsp;&nbsp;it&nbsp;&nbsp;matches&nbsp;&nbsp;must&nbsp;&nbsp;have&nbsp;&nbsp;a&nbsp;&nbsp;fixed<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;length.&nbsp;&nbsp;However,&nbsp;if&nbsp;there&nbsp;are&nbsp;several&nbsp;alternatives,&nbsp;they&nbsp;do<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;not&nbsp;all&nbsp;have&nbsp;to&nbsp;have&nbsp;the&nbsp;same&nbsp;fixed&nbsp;length.&nbsp;Thus<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(?&#60;=bullock|donkey)<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;permitted,&nbsp;but<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(?&#60;!dogs?|cats?)<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;causes&nbsp;an&nbsp;error&nbsp;at&nbsp;compile&nbsp;time.&nbsp;Branches&nbsp;&nbsp;that&nbsp;&nbsp;match&nbsp;&nbsp;dif-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ferent&nbsp;length&nbsp;strings&nbsp;are&nbsp;permitted&nbsp;only&nbsp;at&nbsp;the&nbsp;top&nbsp;level&nbsp;of<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;lookbehind&nbsp;assertion.&nbsp;This&nbsp;is&nbsp;an&nbsp;extension&nbsp;&nbsp;compared&nbsp;&nbsp;with<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Perl&nbsp;&nbsp;5.005,&nbsp;&nbsp;which&nbsp;&nbsp;requires&nbsp;all&nbsp;branches&nbsp;to&nbsp;match&nbsp;the&nbsp;same<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;length&nbsp;of&nbsp;string.&nbsp;An&nbsp;assertion&nbsp;such&nbsp;as<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(?&#60;=ab(c|de))<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;not&nbsp;permitted,&nbsp;because&nbsp;its&nbsp;single&nbsp;&nbsp;top-level&nbsp;&nbsp;branch&nbsp;&nbsp;can<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;match&nbsp;two&nbsp;different&nbsp;lengths,&nbsp;but&nbsp;it&nbsp;is&nbsp;acceptable&nbsp;if&nbsp;rewrit-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ten&nbsp;to&nbsp;use&nbsp;two&nbsp;top-level&nbsp;branches:<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(?&#60;=abc|abde)<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;implementation&nbsp;of&nbsp;lookbehind&nbsp;&nbsp;assertions&nbsp;&nbsp;is,&nbsp;&nbsp;for&nbsp;&nbsp;each<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alternative,&nbsp;&nbsp;to&nbsp;&nbsp;temporarily&nbsp;move&nbsp;the&nbsp;current&nbsp;position&nbsp;back<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;by&nbsp;the&nbsp;fixed&nbsp;width&nbsp;and&nbsp;then&nbsp;&nbsp;try&nbsp;&nbsp;to&nbsp;&nbsp;match.&nbsp;&nbsp;If&nbsp;&nbsp;there&nbsp;&nbsp;are<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insufficient&nbsp;&nbsp;characters&nbsp;&nbsp;before&nbsp;&nbsp;the&nbsp;&nbsp;current&nbsp;position,&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;match&nbsp;is&nbsp;deemed&nbsp;to&nbsp;fail.&nbsp;&nbsp;Lookbehinds&nbsp;&nbsp;in&nbsp;&nbsp;conjunction&nbsp;&nbsp;with<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;once-only&nbsp;&nbsp;subpatterns&nbsp;can&nbsp;be&nbsp;particularly&nbsp;useful&nbsp;for&nbsp;match-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ing&nbsp;at&nbsp;the&nbsp;ends&nbsp;of&nbsp;strings;&nbsp;an&nbsp;example&nbsp;is&nbsp;given&nbsp;at&nbsp;&nbsp;the&nbsp;&nbsp;end<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;the&nbsp;section&nbsp;on&nbsp;once-only&nbsp;subpatterns.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Several&nbsp;assertions&nbsp;(of&nbsp;any&nbsp;sort)&nbsp;may&nbsp;&nbsp;occur&nbsp;&nbsp;in&nbsp;&nbsp;succession.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;example,<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(?&#60;=\d{3})(?&#60;!999)foo<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matches&nbsp;"foo"&nbsp;preceded&nbsp;by&nbsp;three&nbsp;digits&nbsp;that&nbsp;are&nbsp;&nbsp;not&nbsp;&nbsp;"999".<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Furthermore,&nbsp;&nbsp;assertions&nbsp;&nbsp;can&nbsp;&nbsp;be&nbsp;nested&nbsp;in&nbsp;any&nbsp;combination.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;example,<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(?&#60;=(?&#60;!foo)bar)baz<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matches&nbsp;an&nbsp;occurrence&nbsp;of&nbsp;"baz"&nbsp;that&nbsp;&nbsp;is&nbsp;&nbsp;preceded&nbsp;&nbsp;by&nbsp;&nbsp;"bar"<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;which&nbsp;in&nbsp;turn&nbsp;is&nbsp;not&nbsp;preceded&nbsp;by&nbsp;"foo".<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Assertion&nbsp;subpatterns&nbsp;are&nbsp;not&nbsp;capturing&nbsp;subpatterns,&nbsp;and&nbsp;may<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;not&nbsp;&nbsp;be&nbsp;&nbsp;repeated,&nbsp;&nbsp;because&nbsp;&nbsp;it&nbsp;makes&nbsp;no&nbsp;sense&nbsp;to&nbsp;assert&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;same&nbsp;thing&nbsp;several&nbsp;times.&nbsp;If&nbsp;an&nbsp;assertion&nbsp;contains&nbsp;capturing<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subpatterns&nbsp;within&nbsp;it,&nbsp;these&nbsp;are&nbsp;always&nbsp;counted&nbsp;for&nbsp;the&nbsp;pur-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;poses&nbsp;of&nbsp;numbering&nbsp;the&nbsp;capturing&nbsp;subpatterns&nbsp;&nbsp;in&nbsp;&nbsp;the&nbsp;&nbsp;whole<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pattern.&nbsp;&nbsp;&nbsp;Substring&nbsp;&nbsp;capturing&nbsp;&nbsp;is&nbsp;carried&nbsp;out&nbsp;for&nbsp;positive<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assertions,&nbsp;but&nbsp;it&nbsp;does&nbsp;not&nbsp;make&nbsp;sense&nbsp;for&nbsp;&nbsp;negative&nbsp;&nbsp;asser-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tions.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Assertions&nbsp;count&nbsp;towards&nbsp;the&nbsp;maximum&nbsp;&nbsp;of&nbsp;&nbsp;200&nbsp;&nbsp;parenthesized<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subpatterns.<br>
<br>
<br>
<br>
ONCE-ONLY&nbsp;SUBPATTERNS<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;With&nbsp;both&nbsp;maximizing&nbsp;and&nbsp;minimizing&nbsp;repetition,&nbsp;&nbsp;failure&nbsp;&nbsp;of<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;what&nbsp;&nbsp;follows&nbsp;&nbsp;normally&nbsp;&nbsp;causes&nbsp;&nbsp;the&nbsp;repeated&nbsp;item&nbsp;to&nbsp;be&nbsp;re-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;evaluated&nbsp;to&nbsp;see&nbsp;if&nbsp;a&nbsp;different&nbsp;number&nbsp;of&nbsp;repeats&nbsp;allows&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rest&nbsp;&nbsp;of&nbsp;&nbsp;the&nbsp;&nbsp;pattern&nbsp;&nbsp;to&nbsp;&nbsp;match.&nbsp;Sometimes&nbsp;it&nbsp;is&nbsp;useful&nbsp;to<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prevent&nbsp;this,&nbsp;either&nbsp;to&nbsp;change&nbsp;the&nbsp;nature&nbsp;of&nbsp;the&nbsp;&nbsp;match,&nbsp;&nbsp;or<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;to&nbsp;&nbsp;cause&nbsp;&nbsp;it&nbsp;fail&nbsp;earlier&nbsp;than&nbsp;it&nbsp;otherwise&nbsp;might,&nbsp;when&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;author&nbsp;of&nbsp;the&nbsp;pattern&nbsp;knows&nbsp;there&nbsp;is&nbsp;no&nbsp;&nbsp;point&nbsp;&nbsp;in&nbsp;&nbsp;carrying<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;on.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Consider,&nbsp;for&nbsp;example,&nbsp;the&nbsp;pattern&nbsp;\d+foo&nbsp;&nbsp;when&nbsp;&nbsp;applied&nbsp;&nbsp;to<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;subject&nbsp;line<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;123456bar<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;After&nbsp;matching&nbsp;all&nbsp;6&nbsp;digits&nbsp;and&nbsp;then&nbsp;failing&nbsp;to&nbsp;match&nbsp;"foo",<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;normal&nbsp;action&nbsp;of&nbsp;the&nbsp;matcher&nbsp;is&nbsp;to&nbsp;try&nbsp;again&nbsp;with&nbsp;only&nbsp;5<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;digits&nbsp;matching&nbsp;the&nbsp;\d+&nbsp;item,&nbsp;and&nbsp;then&nbsp;with&nbsp;4,&nbsp;&nbsp;and&nbsp;&nbsp;so&nbsp;&nbsp;on,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;before&nbsp;ultimately&nbsp;failing.&nbsp;Once-only&nbsp;subpatterns&nbsp;provide&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;means&nbsp;for&nbsp;specifying&nbsp;that&nbsp;once&nbsp;a&nbsp;portion&nbsp;of&nbsp;the&nbsp;pattern&nbsp;&nbsp;has<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matched,&nbsp;&nbsp;it&nbsp;&nbsp;is&nbsp;&nbsp;not&nbsp;to&nbsp;be&nbsp;re-evaluated&nbsp;in&nbsp;this&nbsp;way,&nbsp;so&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matcher&nbsp;would&nbsp;give&nbsp;up&nbsp;immediately&nbsp;on&nbsp;failing&nbsp;to&nbsp;match&nbsp;&nbsp;"foo"<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;&nbsp;first&nbsp;&nbsp;time.&nbsp;&nbsp;The&nbsp;&nbsp;notation&nbsp;&nbsp;is&nbsp;another&nbsp;kind&nbsp;of&nbsp;special<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parenthesis,&nbsp;starting&nbsp;with&nbsp;(?&#62;&nbsp;as&nbsp;in&nbsp;this&nbsp;example:<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(?&#62;\d+)bar<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;kind&nbsp;of&nbsp;parenthesis&nbsp;"locks&nbsp;up"&nbsp;the&nbsp;&nbsp;part&nbsp;of&nbsp;the&nbsp;pattern<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;it&nbsp;&nbsp;contains&nbsp;once&nbsp;it&nbsp;has&nbsp;matched,&nbsp;and&nbsp;a&nbsp;failure&nbsp;further&nbsp;into<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;pattern&nbsp;is&nbsp;prevented&nbsp;from&nbsp;backtracking&nbsp;&nbsp;into&nbsp;&nbsp;it.&nbsp;&nbsp;Back-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tracking&nbsp;&nbsp;past&nbsp;&nbsp;it&nbsp;to&nbsp;previous&nbsp;items,&nbsp;however,&nbsp;works&nbsp;as&nbsp;nor-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mal.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An&nbsp;alternative&nbsp;description&nbsp;is&nbsp;that&nbsp;a&nbsp;subpattern&nbsp;of&nbsp;this&nbsp;type<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matches&nbsp;&nbsp;the&nbsp;&nbsp;string&nbsp;&nbsp;of&nbsp;&nbsp;characters&nbsp;that&nbsp;an&nbsp;identical&nbsp;stan-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dalone&nbsp;pattern&nbsp;would&nbsp;match,&nbsp;if&nbsp;anchored&nbsp;at&nbsp;the&nbsp;current&nbsp;point<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in&nbsp;the&nbsp;subject&nbsp;string.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Once-only&nbsp;subpatterns&nbsp;are&nbsp;not&nbsp;capturing&nbsp;subpatterns.&nbsp;&nbsp;Simple<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cases&nbsp;&nbsp;such&nbsp;as&nbsp;the&nbsp;above&nbsp;example&nbsp;can&nbsp;be&nbsp;thought&nbsp;of&nbsp;as&nbsp;a&nbsp;max-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imizing&nbsp;repeat&nbsp;that&nbsp;must&nbsp;&nbsp;swallow&nbsp;&nbsp;everything&nbsp;&nbsp;it&nbsp;&nbsp;can.&nbsp;&nbsp;So,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;both&nbsp;\d+&nbsp;and&nbsp;\d+?&nbsp;are&nbsp;prepared&nbsp;to&nbsp;adjust&nbsp;the&nbsp;number&nbsp;of<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;digits&nbsp;they&nbsp;match&nbsp;in&nbsp;order&nbsp;to&nbsp;make&nbsp;the&nbsp;rest&nbsp;of&nbsp;&nbsp;the&nbsp;&nbsp;pattern<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;match,&nbsp;(?&#62;\d+)&nbsp;can&nbsp;only&nbsp;match&nbsp;an&nbsp;entire&nbsp;sequence&nbsp;of&nbsp;digits.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;construction&nbsp;can&nbsp;of&nbsp;course&nbsp;contain&nbsp;arbitrarily&nbsp;&nbsp;compli-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cated&nbsp;subpatterns,&nbsp;and&nbsp;it&nbsp;can&nbsp;be&nbsp;nested.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Once-only&nbsp;subpatterns&nbsp;can&nbsp;be&nbsp;used&nbsp;in&nbsp;conjunction&nbsp;with&nbsp;&nbsp;look-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;behind&nbsp;&nbsp;assertions&nbsp;&nbsp;to&nbsp;specify&nbsp;efficient&nbsp;matching&nbsp;at&nbsp;the&nbsp;end<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;the&nbsp;subject&nbsp;string.&nbsp;Consider&nbsp;a&nbsp;simple&nbsp;pattern&nbsp;such&nbsp;as<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;abcd$<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;when&nbsp;applied&nbsp;to&nbsp;a&nbsp;long&nbsp;&nbsp;string&nbsp;&nbsp;which&nbsp;&nbsp;does&nbsp;&nbsp;not&nbsp;&nbsp;match&nbsp;&nbsp;it.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Because&nbsp;matching&nbsp;proceeds&nbsp;from&nbsp;left&nbsp;to&nbsp;right,&nbsp;PCRE&nbsp;will&nbsp;look<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;each&nbsp;"a"&nbsp;in&nbsp;the&nbsp;subject&nbsp;and&nbsp;then&nbsp;&nbsp;see&nbsp;&nbsp;if&nbsp;&nbsp;what&nbsp;&nbsp;follows<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matches&nbsp;the&nbsp;rest&nbsp;of&nbsp;the&nbsp;pattern.&nbsp;If&nbsp;the&nbsp;pattern&nbsp;is&nbsp;specified<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;as<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;^.*abcd$<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then&nbsp;the&nbsp;initial&nbsp;.*&nbsp;matches&nbsp;the&nbsp;entire&nbsp;string&nbsp;at&nbsp;first,&nbsp;&nbsp;but<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;when&nbsp;&nbsp;this&nbsp;&nbsp;fails,&nbsp;&nbsp;it&nbsp;&nbsp;backtracks&nbsp;to&nbsp;match&nbsp;all&nbsp;but&nbsp;the&nbsp;last<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;character,&nbsp;then&nbsp;all&nbsp;but&nbsp;the&nbsp;last&nbsp;two&nbsp;characters,&nbsp;and&nbsp;so&nbsp;&nbsp;on.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Once&nbsp;again&nbsp;the&nbsp;search&nbsp;for&nbsp;"a"&nbsp;covers&nbsp;the&nbsp;entire&nbsp;string,&nbsp;from<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;right&nbsp;to&nbsp;left,&nbsp;so&nbsp;we&nbsp;are&nbsp;no&nbsp;better&nbsp;off.&nbsp;However,&nbsp;if&nbsp;the&nbsp;pat-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tern&nbsp;is&nbsp;written&nbsp;as<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;^(?&#62;.*)(?&#60;=abcd)<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then&nbsp;there&nbsp;can&nbsp;be&nbsp;no&nbsp;backtracking&nbsp;for&nbsp;the&nbsp;.*&nbsp;&nbsp;item;&nbsp;&nbsp;it&nbsp;&nbsp;can<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;match&nbsp;&nbsp;only&nbsp;&nbsp;the&nbsp;&nbsp;entire&nbsp;&nbsp;string.&nbsp;&nbsp;The&nbsp;subsequent&nbsp;lookbehind<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assertion&nbsp;does&nbsp;a&nbsp;single&nbsp;test&nbsp;on&nbsp;the&nbsp;last&nbsp;four&nbsp;characters.&nbsp;If<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;it&nbsp;&nbsp;fails,&nbsp;&nbsp;the&nbsp;&nbsp;match&nbsp;&nbsp;fails&nbsp;immediately.&nbsp;For&nbsp;long&nbsp;strings,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this&nbsp;approach&nbsp;makes&nbsp;a&nbsp;significant&nbsp;difference&nbsp;to&nbsp;the&nbsp;process-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ing&nbsp;time.<br>
<br>
<br>
<br>
CONDITIONAL&nbsp;SUBPATTERNS<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;It&nbsp;is&nbsp;possible&nbsp;to&nbsp;cause&nbsp;the&nbsp;matching&nbsp;process&nbsp;to&nbsp;obey&nbsp;a&nbsp;&nbsp;sub-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pattern&nbsp;&nbsp;conditionally&nbsp;&nbsp;or&nbsp;to&nbsp;choose&nbsp;between&nbsp;two&nbsp;alternative<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subpatterns,&nbsp;depending&nbsp;on&nbsp;the&nbsp;result&nbsp;&nbsp;of&nbsp;&nbsp;an&nbsp;&nbsp;assertion,&nbsp;&nbsp;or<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;whether&nbsp;&nbsp;a&nbsp;previous&nbsp;capturing&nbsp;subpattern&nbsp;matched&nbsp;or&nbsp;not.&nbsp;The<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;two&nbsp;possible&nbsp;forms&nbsp;of&nbsp;conditional&nbsp;subpattern&nbsp;are<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(?(condition)yes-pattern)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(?(condition)yes-pattern|no-pattern)<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;the&nbsp;condition&nbsp;is&nbsp;satisfied,&nbsp;the&nbsp;yes-pattern&nbsp;is&nbsp;used;&nbsp;oth-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;erwise&nbsp;&nbsp;the&nbsp;&nbsp;no-pattern&nbsp;&nbsp;(if&nbsp;&nbsp;present)&nbsp;is&nbsp;used.&nbsp;If&nbsp;there&nbsp;are<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;more&nbsp;than&nbsp;two&nbsp;alternatives&nbsp;in&nbsp;the&nbsp;subpattern,&nbsp;a&nbsp;compile-time<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;error&nbsp;occurs.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;There&nbsp;are&nbsp;two&nbsp;kinds&nbsp;of&nbsp;condition.&nbsp;If&nbsp;the&nbsp;&nbsp;text&nbsp;&nbsp;between&nbsp;&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parentheses&nbsp;&nbsp;consists&nbsp;of&nbsp;a&nbsp;sequence&nbsp;of&nbsp;digits,&nbsp;then&nbsp;the&nbsp;con-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dition&nbsp;is&nbsp;satisfied&nbsp;if&nbsp;&nbsp;the&nbsp;&nbsp;capturing&nbsp;&nbsp;subpattern&nbsp;&nbsp;of&nbsp;&nbsp;that<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;number&nbsp;&nbsp;has&nbsp;&nbsp;previously&nbsp;matched.&nbsp;Consider&nbsp;the&nbsp;following&nbsp;pat-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tern,&nbsp;which&nbsp;contains&nbsp;non-significant&nbsp;white&nbsp;space&nbsp;to&nbsp;make&nbsp;&nbsp;it<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;more&nbsp;&nbsp;readable&nbsp;&nbsp;(assume&nbsp;&nbsp;the&nbsp;&nbsp;PCRE_EXTENDED&nbsp;&nbsp;option)&nbsp;&nbsp;and&nbsp;to<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;divide&nbsp;it&nbsp;into&nbsp;three&nbsp;parts&nbsp;for&nbsp;ease&nbsp;of&nbsp;discussion:<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&nbsp;\(&nbsp;)?&nbsp;&nbsp;&nbsp;&nbsp;[^()]+&nbsp;&nbsp;&nbsp;&nbsp;(?(1)&nbsp;\)&nbsp;)<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;first&nbsp;part&nbsp;matches&nbsp;an&nbsp;optional&nbsp;opening&nbsp;parenthesis,&nbsp;&nbsp;and<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;that&nbsp;character&nbsp;is&nbsp;present,&nbsp;sets&nbsp;it&nbsp;as&nbsp;the&nbsp;first&nbsp;captured<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;substring.&nbsp;The&nbsp;second&nbsp;part&nbsp;matches&nbsp;one&nbsp;&nbsp;or&nbsp;&nbsp;more&nbsp;&nbsp;characters<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;that&nbsp;&nbsp;are&nbsp;&nbsp;not&nbsp;&nbsp;parentheses.&nbsp;The&nbsp;third&nbsp;part&nbsp;is&nbsp;a&nbsp;conditional<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subpattern&nbsp;that&nbsp;tests&nbsp;whether&nbsp;the&nbsp;first&nbsp;set&nbsp;&nbsp;of&nbsp;&nbsp;parentheses<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matched&nbsp;&nbsp;or&nbsp;&nbsp;not.&nbsp;&nbsp;If&nbsp;&nbsp;they&nbsp;did,&nbsp;that&nbsp;is,&nbsp;if&nbsp;subject&nbsp;started<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;an&nbsp;opening&nbsp;parenthesis,&nbsp;the&nbsp;condition&nbsp;is&nbsp;true,&nbsp;&nbsp;and&nbsp;&nbsp;so<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;&nbsp;yes-pattern&nbsp;&nbsp;is&nbsp;&nbsp;executed&nbsp;&nbsp;and&nbsp;a&nbsp;closing&nbsp;parenthesis&nbsp;is<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;required.&nbsp;Otherwise,&nbsp;since&nbsp;no-pattern&nbsp;is&nbsp;&nbsp;not&nbsp;&nbsp;present,&nbsp;&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subpattern&nbsp;&nbsp;matches&nbsp;&nbsp;nothing.&nbsp;&nbsp;In&nbsp;&nbsp;other&nbsp;words,&nbsp;this&nbsp;pattern<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matches&nbsp;a&nbsp;sequence&nbsp;of&nbsp;non-parentheses,&nbsp;&nbsp;optionally&nbsp;&nbsp;enclosed<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in&nbsp;parentheses.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;the&nbsp;condition&nbsp;is&nbsp;not&nbsp;a&nbsp;sequence&nbsp;of&nbsp;digits,&nbsp;it&nbsp;must&nbsp;be&nbsp;&nbsp;an<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assertion.&nbsp;&nbsp;This&nbsp;&nbsp;may&nbsp;be&nbsp;a&nbsp;positive&nbsp;or&nbsp;negative&nbsp;lookahead&nbsp;or<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lookbehind&nbsp;assertion.&nbsp;Consider&nbsp;this&nbsp;pattern,&nbsp;again&nbsp;&nbsp;contain-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ing&nbsp;&nbsp;non-significant&nbsp;&nbsp;white&nbsp;space,&nbsp;and&nbsp;with&nbsp;the&nbsp;two&nbsp;alterna-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tives&nbsp;on&nbsp;the&nbsp;second&nbsp;line:<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(?(?=[^a-z]*[a-z])<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\d{2}[a-z]{3}-\d{2}&nbsp;&nbsp;|&nbsp;&nbsp;\d{2}-\d{2}-\d{2}&nbsp;)<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;condition&nbsp;is&nbsp;a&nbsp;positive&nbsp;lookahead&nbsp;assertion&nbsp;that&nbsp;matches<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;an&nbsp;optional&nbsp;sequence&nbsp;of&nbsp;non-letters&nbsp;followed&nbsp;by&nbsp;a&nbsp;letter.&nbsp;In<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;other&nbsp;words,&nbsp;it&nbsp;tests&nbsp;for&nbsp;&nbsp;the&nbsp;&nbsp;presence&nbsp;&nbsp;of&nbsp;&nbsp;at&nbsp;&nbsp;least&nbsp;&nbsp;one<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;letter&nbsp;&nbsp;in&nbsp;the&nbsp;subject.&nbsp;If&nbsp;a&nbsp;letter&nbsp;is&nbsp;found,&nbsp;the&nbsp;subject&nbsp;is<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matched&nbsp;against&nbsp;&nbsp;the&nbsp;&nbsp;first&nbsp;&nbsp;alternative;&nbsp;&nbsp;otherwise&nbsp;&nbsp;it&nbsp;&nbsp;is<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matched&nbsp;&nbsp;against&nbsp;the&nbsp;second.&nbsp;This&nbsp;pattern&nbsp;matches&nbsp;strings&nbsp;in<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;one&nbsp;of&nbsp;the&nbsp;two&nbsp;forms&nbsp;dd-aaa-dd&nbsp;or&nbsp;dd-dd-dd,&nbsp;&nbsp;where&nbsp;&nbsp;aaa&nbsp;&nbsp;are<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;letters&nbsp;and&nbsp;dd&nbsp;are&nbsp;digits.<br>
<br>
<br>
<br>
COMMENTS<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;&nbsp;sequence&nbsp;&nbsp;(?#&nbsp;&nbsp;marks&nbsp;&nbsp;the&nbsp;&nbsp;start&nbsp;&nbsp;of&nbsp;&nbsp;a&nbsp;&nbsp;comment&nbsp;&nbsp;which<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continues&nbsp;&nbsp;&nbsp;up&nbsp;&nbsp;to&nbsp;&nbsp;the&nbsp;&nbsp;next&nbsp;&nbsp;closing&nbsp;&nbsp;parenthesis.&nbsp;&nbsp;Nested<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parentheses&nbsp;are&nbsp;not&nbsp;permitted.&nbsp;The&nbsp;characters&nbsp;that&nbsp;make&nbsp;up&nbsp;a<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;comment&nbsp;play&nbsp;no&nbsp;part&nbsp;in&nbsp;the&nbsp;pattern&nbsp;matching&nbsp;at&nbsp;all.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;the&nbsp;PCRE_EXTENDED&nbsp;option&nbsp;is&nbsp;set,&nbsp;an&nbsp;unescaped&nbsp;#&nbsp;character<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outside&nbsp;&nbsp;a&nbsp;character&nbsp;class&nbsp;introduces&nbsp;a&nbsp;comment&nbsp;that&nbsp;contin-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ues&nbsp;up&nbsp;to&nbsp;the&nbsp;next&nbsp;newline&nbsp;character&nbsp;in&nbsp;the&nbsp;pattern.<br>
<br>
<br>
<br>
PERFORMANCE<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Certain&nbsp;items&nbsp;that&nbsp;may&nbsp;appear&nbsp;in&nbsp;patterns&nbsp;are&nbsp;more&nbsp;efficient<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;than&nbsp;&nbsp;others.&nbsp;&nbsp;It&nbsp;is&nbsp;more&nbsp;efficient&nbsp;to&nbsp;use&nbsp;a&nbsp;character&nbsp;class<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;like&nbsp;[aeiou]&nbsp;than&nbsp;a&nbsp;set&nbsp;of&nbsp;alternatives&nbsp;such&nbsp;as&nbsp;(a|e|i|o|u).<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;In&nbsp;&nbsp;general,&nbsp;&nbsp;the&nbsp;&nbsp;simplest&nbsp;&nbsp;construction&nbsp;&nbsp;that&nbsp;provides&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;required&nbsp;behaviour&nbsp;is&nbsp;usually&nbsp;the&nbsp;&nbsp;most&nbsp;&nbsp;efficient.&nbsp;&nbsp;Jeffrey<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Friedl's&nbsp;&nbsp;book&nbsp;contains&nbsp;a&nbsp;lot&nbsp;of&nbsp;discussion&nbsp;about&nbsp;optimizing<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regular&nbsp;expressions&nbsp;for&nbsp;efficient&nbsp;performance.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;When&nbsp;a&nbsp;pattern&nbsp;begins&nbsp;with&nbsp;.*&nbsp;and&nbsp;the&nbsp;PCRE_DOTALL&nbsp;option&nbsp;&nbsp;is<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set,&nbsp;&nbsp;the&nbsp;&nbsp;pattern&nbsp;&nbsp;is&nbsp;implicitly&nbsp;anchored&nbsp;by&nbsp;PCRE,&nbsp;since&nbsp;it<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;can&nbsp;match&nbsp;only&nbsp;at&nbsp;the&nbsp;start&nbsp;of&nbsp;a&nbsp;subject&nbsp;string.&nbsp;However,&nbsp;if<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCRE_DOTALL&nbsp;&nbsp;is&nbsp;not&nbsp;set,&nbsp;PCRE&nbsp;cannot&nbsp;make&nbsp;this&nbsp;optimization,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;because&nbsp;the&nbsp;.&nbsp;metacharacter&nbsp;does&nbsp;not&nbsp;then&nbsp;match&nbsp;&nbsp;a&nbsp;&nbsp;newline,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;if&nbsp;the&nbsp;subject&nbsp;string&nbsp;contains&nbsp;newlines,&nbsp;the&nbsp;pattern&nbsp;may<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;match&nbsp;from&nbsp;the&nbsp;character&nbsp;immediately&nbsp;following&nbsp;one&nbsp;&nbsp;of&nbsp;&nbsp;them<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;instead&nbsp;of&nbsp;from&nbsp;the&nbsp;very&nbsp;start.&nbsp;For&nbsp;example,&nbsp;the&nbsp;pattern<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(.*)&nbsp;second<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matches&nbsp;the&nbsp;subject&nbsp;"first\nand&nbsp;second"&nbsp;(where&nbsp;\n&nbsp;stands&nbsp;for<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;newline&nbsp;character)&nbsp;with&nbsp;the&nbsp;first&nbsp;captured&nbsp;substring&nbsp;being<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"and".&nbsp;In&nbsp;order&nbsp;to&nbsp;do&nbsp;this,&nbsp;PCRE&nbsp;&nbsp;has&nbsp;&nbsp;to&nbsp;&nbsp;retry&nbsp;&nbsp;the&nbsp;&nbsp;match<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;starting&nbsp;after&nbsp;every&nbsp;newline&nbsp;in&nbsp;the&nbsp;subject.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;you&nbsp;are&nbsp;using&nbsp;such&nbsp;a&nbsp;pattern&nbsp;with&nbsp;subject&nbsp;strings&nbsp;that&nbsp;do<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;not&nbsp;&nbsp;contain&nbsp;&nbsp;newlines,&nbsp;&nbsp;the&nbsp;best&nbsp;performance&nbsp;is&nbsp;obtained&nbsp;by<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setting&nbsp;PCRE_DOTALL,&nbsp;or&nbsp;starting&nbsp;the&nbsp;&nbsp;pattern&nbsp;&nbsp;with&nbsp;&nbsp;^.*&nbsp;&nbsp;to<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;indicate&nbsp;&nbsp;explicit&nbsp;anchoring.&nbsp;That&nbsp;saves&nbsp;PCRE&nbsp;from&nbsp;having&nbsp;to<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scan&nbsp;along&nbsp;the&nbsp;subject&nbsp;looking&nbsp;for&nbsp;a&nbsp;newline&nbsp;to&nbsp;restart&nbsp;at.<br>
&nbsp;&nbsp;&nbsp;&nbsp;</P
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="pcre.pattern.modifiers.html"
>Prev</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="manual.html"
>Home</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="ref.regex.html"
>Next</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>Pattern Modifiers</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="ref.pcre.html"
>Up</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Regular Expression Functions (POSIX Extended)</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>