2013-06-04 2 views
7

я перевожу код из Perl и я прийти через следующую строкуЗначение бит регулярного выражения perl?

$text =~ s/([?!\.][\ ]*[\'\"\)\]\p{IsPf}]+) +([\'\"\(\[\¿\¡\p{IsPi}]*[\ ]*[\p{IsUpper}])/$1\n$2/g; 

Мой вопрос, что делает \ р {ISPF} и \ р {ИСПИ} матч к? Я пробовал поиск в Интернете, но ничего не нашел ...

+1

В стороне: в этом регулярном выражении есть много ненужных обратных косых черт и два ненужных захвата. 's/[?!.] [] * ['") \] \ p {IsPf}] + \ K + (? = [' "([¿¡\ p {IsPi}] * [] * [\ p {IsUpper}])/\ n/g' должен быть эквивалентен для практических целей. – amon

ответ

11

\p{..} матчи символов по своим свойствам символов Юникода: http://perldoc.perl.org/perlunicode.html#Unicode-Character-Properties

В частности, \p{IsPf} матчи символов со свойством «final punctuation» и \p{IsPi} матчей charactes со свойством «initial punctuation». Кажется, что они в основном закрывают и открывают кавычки.

Точка замещения, по-видимому, прерывает предложения на отдельные строки, сопоставляя конец и начало предложения, принимая во внимание, что предложение может начинаться и заканчиваться различными типами пунктуации.

+0

Большое спасибо. Ответы на ваши вопросы и ответы Тима были бы прекрасны ... к сожалению, я должен выбрать один, а не оба. –

3

В качестве дополнительной информации, unichars от Unicode::Tussle можно использовать для перечисления соответствующих символов.

$ unichars -au '\p{IsPi}' | cat 
« U+000AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 
‘ U+02018 LEFT SINGLE QUOTATION MARK 
‛ U+0201B SINGLE HIGH-REVERSED-9 QUOTATION MARK 
“ U+0201C LEFT DOUBLE QUOTATION MARK 
‟ U+0201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK 
‹ U+02039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK 
⸂ U+02E02 LEFT SUBSTITUTION BRACKET 
⸄ U+02E04 LEFT DOTTED SUBSTITUTION BRACKET 
⸉ U+02E09 LEFT TRANSPOSITION BRACKET 
⸌ U+02E0C LEFT RAISED OMISSION BRACKET 
⸜ U+02E1C LEFT LOW PARAPHRASE BRACKET 
⸠ U+02E20 LEFT VERTICAL BAR WITH QUILL 

$ unichars -au '\p{IsPf}' | cat 
» U+000BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 
’ U+02019 RIGHT SINGLE QUOTATION MARK 
” U+0201D RIGHT DOUBLE QUOTATION MARK 
› U+0203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 
⸃ U+02E03 RIGHT SUBSTITUTION BRACKET 
⸅ U+02E05 RIGHT DOTTED SUBSTITUTION BRACKET 
⸊ U+02E0A RIGHT TRANSPOSITION BRACKET 
⸍ U+02E0D RIGHT RAISED OMISSION BRACKET 
⸝ U+02E1D RIGHT LOW PARAPHRASE BRACKET 
⸡ U+02E21 RIGHT VERTICAL BAR WITH QUILL 
Смежные вопросы