2013-06-04 21 views
7

mam tłumaczenia kod z Perl a ja się spotkałem następujący wierszZnaczenie części wyrażenia regularnego perla?

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

moje pytanie, co robi \ p {ISPF} i \ p {} ISPI mecz? Próbowałem wyszukiwać w Internecie, ale nie znalazłem nic ...

+1

Na marginesie: w tym regexie jest mnóstwo niepotrzebnych ukośników i dwa niepotrzebne przechwyty. 's/[?!.] [] * ['") \] \ p {IsPf}] + \ K + (? = [' "([¿¡\ p {IsPi}] * [] * [\ p {IsUpper}])/\ n/g' powinno być równoważne dla celów praktycznych – amon

Odpowiedz

11

\p{..} tenis znaków według ich właściwości znaków Unicode: http://perldoc.perl.org/perlunicode.html#Unicode-Character-Properties

W szczególności \p{IsPf} tenis postacie z „final punctuation” własności i \p{IsPi} tenis Charactes z „initial punctuation” własności. Wydaje się, że są to głównie zamykające i otwierające cytaty.

Wydaje się, że punktem zastąpienia jest podział zdań na oddzielne linie przez dopasowanie końca i początku zdania, biorąc pod uwagę, że zdanie może zaczynać się i kończyć różnymi rodzajami interpunkcji.

+0

Wielkie dzięki. Zarówno twoje, jak i odpowiedzi Tima byłyby idealne ... niestety muszę wybrać jedno, a nie jedno i drugie. –

3

Jako dodatkowe informacje można użyć unichars z Unicode::Tussle w celu wyświetlenia listy pasujących znaków.

$ 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 
Powiązane problemy