3 perlrecharclass - Perl Regular Expression Character Classes
7 The top level documentation about Perl regular expressions
10 This manual page discusses the syntax and use of character
11 classes in Perl Regular Expressions.
13 A character class is a way of denoting a set of characters,
14 in such a way that one character of the set is matched.
15 It's important to remember that matching a character class
16 consumes exactly one character in the source string. (The source
17 string is the string the regular expression is matched against.)
19 There are three types of character classes in Perl regular
20 expressions: the dot, backslashed sequences, and the bracketed form.
24 The dot (or period), C<.> is probably the most used, and certainly
25 the most well-known character class. By default, a dot matches any
26 character, except for the newline. The default can be changed to
27 add matching the newline with the I<single line> modifier: either
28 for the entire regular expression using the C</s> modifier, or
29 locally using C<(?s)>.
31 Here are some examples:
35 "" =~ /./ # No match (dot has to match a character)
36 "\n" =~ /./ # No match (dot does not match a newline)
37 "\n" =~ /./s # Match (global 'single line' modifier)
38 "\n" =~ /(?s:.)/ # Match (local 'single line' modifier)
39 "ab" =~ /^.$/ # No match (dot matches one character)
41 =head2 Backslashed sequences
43 Perl regular expressions contain many backslashed sequences that
44 constitute a character class. That is, they will match a single
45 character, if that character belongs to a specific set of characters
46 (defined by the sequence). A backslashed sequence is a sequence of
47 characters starting with a backslash. Not all backslashed sequences
48 are character class; for a full list, see L<perlrebackslash>.
50 Here's a list of the backslashed sequences, which are discussed in
53 \d Match a digit character.
54 \D Match a non-digit character.
55 \w Match a "word" character.
56 \W Match a non-"word" character.
57 \s Match a white space character.
58 \S Match a non-white space character.
59 \h Match a horizontal white space character.
60 \H Match a character that isn't horizontal white space.
61 \N Match a character that isn't newline.
62 \v Match a vertical white space character.
63 \V Match a character that isn't vertical white space.
64 \pP, \p{Prop} Match a character matching a Unicode property.
65 \PP, \P{Prop} Match a character that doesn't match a Unicode property.
69 C<\d> matches a single character that is considered to be a I<digit>.
70 What is considered a digit depends on the internal encoding of
71 the source string. If the source string is in UTF-8 format, C<\d>
72 not only matches the digits '0' - '9', but also Arabic, Devanagari and
73 digits from other languages. Otherwise, if there is a locale in effect,
74 it will match whatever characters the locale considers digits. Without
75 a locale, C<\d> matches the digits '0' to '9'.
76 See L</Locale, Unicode and UTF-8>.
78 Any character that isn't matched by C<\d> will be matched by C<\D>.
80 =head3 Word characters
82 C<\w> matches a single I<word> character: an alphanumeric character
83 (that is, an alphabetic character, or a digit), or the underscore (C<_>).
84 What is considered a word character depends on the internal encoding
85 of the string. If it's in UTF-8 format, C<\w> matches those characters
86 that are considered word characters in the Unicode database. That is, it
87 not only matches ASCII letters, but also Thai letters, Greek letters, etc.
88 If the source string isn't in UTF-8 format, C<\w> matches those characters
89 that are considered word characters by the current locale. Without
90 a locale in effect, C<\w> matches the ASCII letters, digits and the
93 Any character that isn't matched by C<\w> will be matched by C<\W>.
97 C<\s> matches any single character that is considered white space. In the
98 ASCII range, C<\s> matches the horizontal tab (C<\t>), the new line
99 (C<\n>), the form feed (C<\f>), the carriage return (C<\r>), and the
100 space (the vertical tab, C<\cK> is not matched by C<\s>). The exact set
101 of characters matched by C<\s> depends on whether the source string is
102 in UTF-8 format. If it is, C<\s> matches what is considered white space
103 in the Unicode database. Otherwise, if there is a locale in effect, C<\s>
104 matches whatever is considered white space by the current locale. Without
105 a locale, C<\s> matches the five characters mentioned in the beginning
106 of this paragraph. Perhaps the most notable difference is that C<\s>
107 matches a non-breaking space only if the non-breaking space is in a
108 UTF-8 encoded string.
110 Any character that isn't matched by C<\s> will be matched by C<\S>.
112 C<\h> will match any character that is considered horizontal white space;
113 this includes the space and the tab characters. C<\H> will match any character
114 that is not considered horizontal white space.
116 C<\N>, like the dot, will match any character that is not a newline. The
117 difference is that C<\N> will not be influenced by the single line C</s>
118 regular expression modifier. (Note that, since C<\N{}> is also used for
119 Unicode named characters, if C<\N> is followed by an opening brace and
120 by a letter, perl will assume that a Unicode character name is coming.)
122 C<\v> will match any character that is considered vertical white space;
123 this includes the carriage return and line feed characters (newline).
124 C<\V> will match any character that is not considered vertical white space.
126 C<\R> matches anything that can be considered a newline under Unicode
127 rules. It's not a character class, as it can match a multi-character
128 sequence. Therefore, it cannot be used inside a bracketed character
129 class. Details are discussed in L<perlrebackslash>.
131 C<\h>, C<\H>, C<\v>, C<\V>, and C<\R> are new in perl 5.10.0.
133 Note that unlike C<\s>, C<\d> and C<\w>, C<\h> and C<\v> always match
134 the same characters, regardless whether the source string is in UTF-8
135 format or not. The set of characters they match is also not influenced
138 One might think that C<\s> is equivalent with C<[\h\v]>. This is not true.
139 The vertical tab (C<"\x0b">) is not matched by C<\s>, it is however
140 considered vertical white space. Furthermore, if the source string is
141 not in UTF-8 format, the next line (C<"\x85">) and the no-break space
142 (C<"\xA0">) are not matched by C<\s>, but are by C<\v> and C<\h> respectively.
143 If the source string is in UTF-8 format, both the next line and the
144 no-break space are matched by C<\s>.
146 The following table is a complete listing of characters matched by
147 C<\s>, C<\h> and C<\v>.
149 The first column gives the code point of the character (in hex format),
150 the second column gives the (Unicode) name. The third column indicates
151 by which class(es) the character is matched.
153 0x00009 CHARACTER TABULATION h s
154 0x0000a LINE FEED (LF) vs
155 0x0000b LINE TABULATION v
156 0x0000c FORM FEED (FF) vs
157 0x0000d CARRIAGE RETURN (CR) vs
159 0x00085 NEXT LINE (NEL) vs [1]
160 0x000a0 NO-BREAK SPACE h s [1]
161 0x01680 OGHAM SPACE MARK h s
162 0x0180e MONGOLIAN VOWEL SEPARATOR h s
167 0x02004 THREE-PER-EM SPACE h s
168 0x02005 FOUR-PER-EM SPACE h s
169 0x02006 SIX-PER-EM SPACE h s
170 0x02007 FIGURE SPACE h s
171 0x02008 PUNCTUATION SPACE h s
172 0x02009 THIN SPACE h s
173 0x0200a HAIR SPACE h s
174 0x02028 LINE SEPARATOR vs
175 0x02029 PARAGRAPH SEPARATOR vs
176 0x0202f NARROW NO-BREAK SPACE h s
177 0x0205f MEDIUM MATHEMATICAL SPACE h s
178 0x03000 IDEOGRAPHIC SPACE h s
184 NEXT LINE and NO-BREAK SPACE only match C<\s> if the source string is in
189 It is worth noting that C<\d>, C<\w>, etc, match single characters, not
190 complete numbers or words. To match a number (that consists of integers),
191 use C<\d+>; to match a word, use C<\w+>.
194 =head3 Unicode Properties
196 C<\pP> and C<\p{Prop}> are character classes to match characters that
197 fit given Unicode classes. One letter classes can be used in the C<\pP>
198 form, with the class name following the C<\p>, otherwise, braces are required.
199 There is a single form, which is just the property name enclosed in the braces,
200 and a compound form which looks like C<\p{name=value}>, which means to match
201 if the property C<name> for the character has the particular C<value>.
202 For instance, a match for a number can be written as C</\pN/> or as
203 C</\p{Number}/>, or as C</\p{Number=True}/>.
204 Lowercase letters are matched by the property I<Lowercase_Letter> which
205 has as short form I<Ll>. They need the braces, so are written as C</\p{Ll}/> or
206 C</\p{Lowercase_Letter}/>, or C</\p{General_Category=Lowercase_Letter}/>
207 (the underscores are optional).
208 C</\pLl/> is valid, but means something different.
209 It matches a two character string: a letter (Unicode property C<\pL>),
210 followed by a lowercase C<l>.
212 For more details, see L<perlunicode/Unicode Character Properties>; for a
213 complete list of possible properties, see
214 L<perluniprops/Properties accessible through \p{} and \P{}>.
215 It is also possible to define your own properties. This is discussed in
216 L<perlunicode/User-Defined Character Properties>.
221 "a" =~ /\w/ # Match, "a" is a 'word' character.
222 "7" =~ /\w/ # Match, "7" is a 'word' character as well.
223 "a" =~ /\d/ # No match, "a" isn't a digit.
224 "7" =~ /\d/ # Match, "7" is a digit.
225 " " =~ /\s/ # Match, a space is white space.
226 "a" =~ /\D/ # Match, "a" is a non-digit.
227 "7" =~ /\D/ # No match, "7" is not a non-digit.
228 " " =~ /\S/ # No match, a space is not non-white space.
230 " " =~ /\h/ # Match, space is horizontal white space.
231 " " =~ /\v/ # No match, space is not vertical white space.
232 "\r" =~ /\v/ # Match, a return is vertical white space.
234 "a" =~ /\pL/ # Match, "a" is a letter.
235 "a" =~ /\p{Lu}/ # No match, /\p{Lu}/ matches upper case letters.
237 "\x{0e0b}" =~ /\p{Thai}/ # Match, \x{0e0b} is the character
238 # 'THAI CHARACTER SO SO', and that's in
239 # Thai Unicode class.
240 "a" =~ /\P{Lao}/ # Match, as "a" is not a Laoian character.
243 =head2 Bracketed Character Classes
245 The third form of character class you can use in Perl regular expressions
246 is the bracketed form. In its simplest form, it lists the characters
247 that may be matched inside square brackets, like this: C<[aeiou]>.
248 This matches one of C<a>, C<e>, C<i>, C<o> or C<u>. Just as the other
249 character classes, exactly one character will be matched. To match
250 a longer string consisting of characters mentioned in the characters
251 class, follow the character class with a quantifier. For instance,
252 C<[aeiou]+> matches a string of one or more lowercase ASCII vowels.
254 Repeating a character in a character class has no
255 effect; it's considered to be in the set only once.
259 "e" =~ /[aeiou]/ # Match, as "e" is listed in the class.
260 "p" =~ /[aeiou]/ # No match, "p" is not listed in the class.
261 "ae" =~ /^[aeiou]$/ # No match, a character class only matches
262 # a single character.
263 "ae" =~ /^[aeiou]+$/ # Match, due to the quantifier.
265 =head3 Special Characters Inside a Bracketed Character Class
267 Most characters that are meta characters in regular expressions (that
268 is, characters that carry a special meaning like C<*> or C<(>) lose
269 their special meaning and can be used inside a character class without
270 the need to escape them. For instance, C<[()]> matches either an opening
271 parenthesis, or a closing parenthesis, and the parens inside the character
272 class don't group or capture.
274 Characters that may carry a special meaning inside a character class are:
275 C<\>, C<^>, C<->, C<[> and C<]>, and are discussed below. They can be
276 escaped with a backslash, although this is sometimes not needed, in which
277 case the backslash may be omitted.
279 The sequence C<\b> is special inside a bracketed character class. While
280 outside the character class C<\b> is an assertion indicating a point
281 that does not have either two word characters or two non-word characters
282 on either side, inside a bracketed character class, C<\b> matches a
285 A C<[> is not special inside a character class, unless it's the start
286 of a POSIX character class (see below). It normally does not need escaping.
288 A C<]> is either the end of a POSIX character class (see below), or it
289 signals the end of the bracketed character class. Normally it needs
290 escaping if you want to include a C<]> in the set of characters.
291 However, if the C<]> is the I<first> (or the second if the first
292 character is a caret) character of a bracketed character class, it
293 does not denote the end of the class (as you cannot have an empty class)
294 and is considered part of the set of characters that can be matched without
299 "+" =~ /[+?*]/ # Match, "+" in a character class is not special.
300 "\cH" =~ /[\b]/ # Match, \b inside in a character class
301 # is equivalent with a backspace.
302 "]" =~ /[][]/ # Match, as the character class contains.
304 "[]" =~ /[[]]/ # Match, the pattern contains a character class
305 # containing just ], and the character class is
308 =head3 Character Ranges
310 It is not uncommon to want to match a range of characters. Luckily, instead
311 of listing all the characters in the range, one may use the hyphen (C<->).
312 If inside a bracketed character class you have two characters separated
313 by a hyphen, it's treated as if all the characters between the two are in
314 the class. For instance, C<[0-9]> matches any ASCII digit, and C<[a-m]>
315 matches any lowercase letter from the first half of the ASCII alphabet.
317 Note that the two characters on either side of the hyphen are not
318 necessary both letters or both digits. Any character is possible,
319 although not advisable. C<['-?]> contains a range of characters, but
320 most people will not know which characters that will be. Furthermore,
321 such ranges may lead to portability problems if the code has to run on
322 a platform that uses a different character set, such as EBCDIC.
324 If a hyphen in a character class cannot be part of a range, for instance
325 because it is the first or the last character of the character class,
326 or if it immediately follows a range, the hyphen isn't special, and will be
327 considered a character that may be matched. You have to escape the hyphen
328 with a backslash if you want to have a hyphen in your set of characters to
329 be matched, and its position in the class is such that it can be considered
334 [a-z] # Matches a character that is a lower case ASCII letter.
335 [a-fz] # Matches any letter between 'a' and 'f' (inclusive) or the
337 [-z] # Matches either a hyphen ('-') or the letter 'z'.
338 [a-f-m] # Matches any letter between 'a' and 'f' (inclusive), the
339 # hyphen ('-'), or the letter 'm'.
340 ['-?] # Matches any of the characters '()*+,-./0123456789:;<=>?
341 # (But not on an EBCDIC platform).
346 It is also possible to instead list the characters you do not want to
347 match. You can do so by using a caret (C<^>) as the first character in the
348 character class. For instance, C<[^a-z]> matches a character that is not a
349 lowercase ASCII letter.
351 This syntax make the caret a special character inside a bracketed character
352 class, but only if it is the first character of the class. So if you want
353 to have the caret as one of the characters you want to match, you either
354 have to escape the caret, or not list it first.
358 "e" =~ /[^aeiou]/ # No match, the 'e' is listed.
359 "x" =~ /[^aeiou]/ # Match, as 'x' isn't a lowercase vowel.
360 "^" =~ /[^^]/ # No match, matches anything that isn't a caret.
361 "^" =~ /[x^]/ # Match, caret is not special here.
363 =head3 Backslash Sequences
365 You can put a backslash sequence character class inside a bracketed character
366 class, and it will act just as if you put all the characters matched by
367 the backslash sequence inside the character class. For instance,
368 C<[a-f\d]> will match any digit, or any of the lowercase letters between
369 'a' and 'f' inclusive.
373 /[\p{Thai}\d]/ # Matches a character that is either a Thai
374 # character, or a digit.
375 /[^\p{Arabic}()]/ # Matches a character that is neither an Arabic
376 # character, nor a parenthesis.
378 Backslash sequence character classes cannot form one of the endpoints
381 =head3 Posix Character Classes
383 Posix character classes have the form C<[:class:]>, where I<class> is
384 name, and the C<[:> and C<:]> delimiters. Posix character classes appear
385 I<inside> bracketed character classes, and are a convenient and descriptive
386 way of listing a group of characters. Be careful about the syntax,
389 $string =~ /[[:alpha:]]/
391 # Incorrect (will warn):
392 $string =~ /[:alpha:]/
394 The latter pattern would be a character class consisting of a colon,
395 and the letters C<a>, C<l>, C<p> and C<h>.
397 Perl recognizes the following POSIX character classes:
399 alpha Any alphabetical character.
400 alnum Any alphanumerical character.
401 ascii Any ASCII character.
402 blank A GNU extension, equal to a space or a horizontal tab ("\t").
403 cntrl Any control character.
404 digit Any digit, equivalent to "\d".
405 graph Any printable character, excluding a space.
406 lower Any lowercase character.
407 print Any printable character, including a space.
408 punct Any punctuation character.
409 space Any white space character. "\s" plus the vertical tab ("\cK").
410 upper Any uppercase character.
411 word Any "word" character, equivalent to "\w".
412 xdigit Any hexadecimal digit, '0' - '9', 'a' - 'f', 'A' - 'F'.
414 The exact set of characters matched depends on whether the source string
415 is internally in UTF-8 format or not. See L</Locale, Unicode and UTF-8>.
417 Most POSIX character classes have C<\p> counterparts. The difference
418 is that the C<\p> classes will always match according to the Unicode
419 properties, regardless whether the string is in UTF-8 format or not.
421 The following table shows the relation between POSIX character classes
422 and the Unicode properties:
424 [[:...:]] \p{...} backslash
442 Some of these names may not be obvious:
448 Any control character. Usually, control characters don't produce output
449 as such, but instead control the terminal somehow: for example newline
450 and backspace are control characters. All characters with C<ord()> less
451 than 32 are usually classified as control characters (in ASCII, the ISO
452 Latin character sets, and Unicode), as is the character C<ord()> value
457 Any character that is I<graphical>, that is, visible. This class consists
458 of all the alphanumerical characters and all punctuation characters.
462 All printable characters, which is the set of all the graphical characters
467 Any punctuation (special) character.
473 A Perl extension to the POSIX character class is the ability to
474 negate it. This is done by prefixing the class name with a caret (C<^>).
477 POSIX Unicode Backslash
478 [[:^digit:]] \P{IsDigit} \D
479 [[:^space:]] \P{IsSpace} \S
480 [[:^word:]] \P{IsWord} \W
482 =head4 [= =] and [. .]
484 Perl will recognize the POSIX character classes C<[=class=]>, and
485 C<[.class.]>, but does not (yet?) support this construct. Use of
486 such a construct will lead to an error.
491 /[[:digit:]]/ # Matches a character that is a digit.
492 /[01[:lower:]]/ # Matches a character that is either a
493 # lowercase letter, or '0' or '1'.
494 /[[:digit:][:^xdigit:]]/ # Matches a character that can be anything,
495 # but the letters 'a' to 'f' in either case.
496 # This is because the character class contains
497 # all digits, and anything that isn't a
498 # hex digit, resulting in a class containing
499 # all characters, but the letters 'a' to 'f'
503 =head2 Locale, Unicode and UTF-8
505 Some of the character classes have a somewhat different behaviour depending
506 on the internal encoding of the source string, and the locale that is
509 C<\w>, C<\d>, C<\s> and the POSIX character classes (and their negations,
510 including C<\W>, C<\D>, C<\S>) suffer from this behaviour.
512 The rule is that if the source string is in UTF-8 format, the character
513 classes match according to the Unicode properties. If the source string
514 isn't, then the character classes match according to whatever locale is
515 in effect. If there is no locale, they match the ASCII defaults
516 (52 letters, 10 digits and underscore for C<\w>, 0 to 9 for C<\d>, etc).
518 This usually means that if you are matching against characters whose C<ord()>
519 values are between 128 and 255 inclusive, your character class may match
520 or not depending on the current locale, and whether the source string is
521 in UTF-8 format. The string will be in UTF-8 format if it contains
522 characters whose C<ord()> value exceeds 255. But a string may be in UTF-8
523 format without it having such characters.
525 For portability reasons, it may be better to not use C<\w>, C<\d>, C<\s>
526 or the POSIX character classes, and use the Unicode properties instead.
530 $str = "\xDF"; # $str is not in UTF-8 format.
531 $str =~ /^\w/; # No match, as $str isn't in UTF-8 format.
532 $str .= "\x{0e0b}"; # Now $str is in UTF-8 format.
533 $str =~ /^\w/; # Match! $str is now in UTF-8 format.
535 $str =~ /^\w/; # Still a match! $str remains in UTF-8 format.