^[[:space:]]*@
Я не могу понять, что означает [[:space:]]*
в приведенном выше регулярном выражении. Пожалуйста, помогите, спасибо!, пожалуйста, объясните это обычное выражение
^[[:space:]]*@
Я не могу понять, что означает [[:space:]]*
в приведенном выше регулярном выражении. Пожалуйста, помогите, спасибо!, пожалуйста, объясните это обычное выражение
Это класс символов POSIX, в этом случае Unicode-дружественный способ представления «любой символ пробела».
См. this page, прокрутите вниз до «Классы символов POSIX».
POSIX предопределяет Unicode с большим отрывом. Обоснование для классов абстрактного характера (мой специальный термин, не помню официальной терминологии) в большей степени относится к переносимости по локалям и наборам символов. – tripleee
[:space:]
является POSIX character class
который соответствует All whitespace characters, including line breaks
в слове.
Другими словами [:space:]
идентичен \s
(с Perl 5.18 [1])
http://www.regular-expressions.info/posixbrackets.html
Перед 5.18, вкладка вертикальной (U + 000B) WASN» т включенных в \s
.
$ diff -u <(unichars -au '\s') <(unichars -au '[[:space:]]') \
&& echo 'no difference'
--- /dev/fd/63 2013-05-21 22:08:03.000000000 -0400
+++ /dev/fd/62 2013-05-21 22:08:03.000000000 -0400
@@ -1,5 +1,6 @@
---- U+00009 CHARACTER TABULATION
---- U+0000A LINE FEED (LF)
+ ---- U+0000B LINE TABULATION
---- U+0000C FORM FEED (FF)
---- U+0000D CARRIAGE RETURN (CR)
---- U+00020 SPACE
Существует несколько способов выражения таких вещей, как «символ пробела», и это один из них. Набор [...]
позволяет включить такие вещи, как [:space:]
, чтобы добавить символы пробела в набор.
Это гласит:
^ # At the beginning of string...
[[:space:]]* # ...zero or more whitespace characters...
@ # ...followed by an at sign.
Не пробельные символы, * пробельные символы *. Возможно, это то, что вы имели в виду, но точная терминология в этом случае важнее обычного, потому что многие начинающие регулярные лица начинают полагать, что '\ s' и/или' [[: space:]] '* do * соответствуют только символу пробела ('0020' U +). –
Пробел - лучший термин, скорректированный соответствующим образом. – tadman
является 'space' буквально пробел или просто слово? – Bill
Это слово. Я видел это регулярное выражение из кода других людей, но не могу его понять. – Runner
@mclaassen Это не связано. Это класс символов POSIX, поддерживаемый Perl, чтобы позволить редакторам регулярных выражений лучше соответствовать Unicode. –