Пожалуйста, поправьте меня, если я ошибаюсь [о $NONBREAKING_PREFIX{$pre} && $NONBREAKING_PREFIX{$pre}==1
проверки] ли префикс в списке неразрывный префиксов
Не могу сказать, не зная, что %NONBREAKING_PREFIX
содержит, но это справедливое предположение.
Пожалуйста, поправьте меня, если я ошибаюсь [о $i<scalar(@words)-1 && ($words[$i+1] =~ /^[\p{IsLower}]/)
проверке], является ли слово не последний маркер и есть еще строчный маркер в качестве следующего слова
Если предположить, что код итерация над @words
, а $i
- это индекс текущего слова, затем он проверяет, следует ли за текущим словом слово, которое начинается с строчной буквы (как определено Unicode).
Является ли $pre =~ /\./
проверкой, является ли префикс единым полным ходом?
Не совсем. Он проверяет, является ли любым символов в строке в $pre
является ПОЛНЫЙ ОСТАНОВ.
$ perl -e'CORE::say "abc.def" =~ /\./ ? "match" : "no match"'
match
$ perl -e'CORE::say "abc!def" =~ /\./ ? "match" : "no match"'
no match
Perl сначала пытается найти совпадение в позиции 0, затем в позиции 1 и т. Д., Пока не найдет совпадение.
И $ до = ~/\ р {IsAlpha}/проверки префикса является ли альфа из списка алфавита в perluniprop?
\p{IsAlpha}
действительно определяется в perluniprops. [Обратите внимание на правильное написание.] Он определяет
\p{Is_*} ⇒ \p{*}
\p{Alpha} ⇒ \p{XPosixAlpha}
\p{XPosixAlpha} ⇒ \p{Alphabetic=Y}
\p{Alpha: *} ⇒ \p{Alphabetic=*}
\p{Alphabetic} ⇒ \p{Alphabetic=Y}
\p{IsAlpha}
так является псевдонимом для \p{Alphabetic=Y}
[1]. Unicode определяет, какие символы являются алфавитом [2]. Существует немало:
$ unichars '\p{Alpha}' | wc -l
10391
Так что, к вопросу. $pre =~ /\p{IsAlpha}/
проверяет, является ли любым символов в строке в $pre
является алфавитным символом.
Один связанный с этим вопрос заключается в том, является ли fullstop уже внутри алфавита perluniprop?
No.
$ perl -e'CORE::say "." =~ /\p{IsAlpha}/ ? "match" : "no match"'
no match
$ uniprops .
U+002E <.> \N{FULL STOP}
\pP \p{Po}
All Any ASCII Assigned Basic_Latin Punct Is_Punctuation Case_Ignorable CI Common Zyyy Po P
Gr_Base Grapheme_Base Graph X_POSIX_Graph GrBase Other_Punctuation Pat_Syn Pattern_Syntax
PatSyn POSIX_Graph POSIX_Print POSIX_Punct Print X_POSIX_Print Punctuation STerm Term
Terminal_Punctuation Unicode X_POSIX_Punct
В отличие от этого,
$ uniprops a
U+0061 <a> \N{LATIN SMALL LETTER A}
\w \pL \p{LC} \p{L_} \p{L&} \p{Ll}
AHex POSIX_XDigit All Alnum X_POSIX_Alnum Alpha X_POSIX_Alpha Alphabetic Any ASCII
ASCII_Hex_Digit Assigned Basic_Latin ID_Continue Is_IDC Cased Cased_Letter LC
Changes_When_Casemapped CWCM Changes_When_Titlecased CWT Changes_When_Uppercased CWU Ll L
Gr_Base Grapheme_Base Graph X_POSIX_Graph GrBase Hex X_POSIX_XDigit Hex_Digit IDC ID_Start
IDS Letter L_ Latin Latn Lowercase_Letter Lower X_POSIX_Lower Lowercase PerlWord POSIX_Word
POSIX_Alnum POSIX_Alpha POSIX_Graph POSIX_Lower POSIX_Print Print X_POSIX_Print Unicode Word
X_POSIX_Word XDigit XID_Continue XIDC XID_Start XIDS
Если да, то не было бы не это условие не будет правдой?
$ perl -E'CORE::say /\./ && /\p{IsAlpha}/ ? "match" : "no match" for $ARGV[0]' a
no match
$ perl -E'CORE::say /\./ && /\p{IsAlpha}/ ? "match" : "no match" for $ARGV[0]' .
no match
$ perl -E'CORE::say /\./ && /\p{IsAlpha}/ ? "match" : "no match" for $ARGV[0]' a.
match
подчеркивания и пробелы игнорируются, так \p{IsAlpha}
, \p{Is_Alpha}
и \p{I s_A l p_h_a}
все эквивалентны.
Список буквенных символов немного отличается от списка буквенных символов.
$ unichars '\p{Letter}' | wc -l
9540
$ unichars '\p{Alpha}' | wc -l
10391
Все буквы алфавитный, но так некоторые буквенные знаки, римские цифры и т.д.
Они проверяют, если эти вещи * содержатся *. Нет, FULL STOP не является буквенной буквой. – ikegami
А теперь я вижу. Итак, '$ pre = ~/\ p {IsAlpha} /' проверяет, находятся ли все символы в '$ pre' в алфавите peruniprop, правильно? – alvas
Нет, он проверяет, содержит ли $ pre * * соответствующий символ, поэтому он проверяет, соответствует ли * любой символ * в $ pre. – ikegami