2013-06-04 9 views
7

che sto traducendo il codice da perl e sono venuto dall'altra parte della seguente rigaSignificato di un po 'di espressione regolare di Perl?

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

La mia domanda è, che cosa fa \ p {} ISPF e \ p {} ISPI partita a? Ho provato a cercare online ma non ho trovato nulla ...

+1

Per inciso: ci sono molti backslashes inutili in quella regex e due catture inutili. 's/[?!.] [] * ['") \] \ p {IsPf}] + \ K + (? = [' "([¿¡\ p {IsPi}] * [] * [\ p {IsUpper}])/\ n/g' dovrebbe essere equivalente per scopi pratici – amon

risposta

11

\p{..} partite personaggi di loro proprietà dei caratteri Unicode: http://perldoc.perl.org/perlunicode.html#Unicode-Character-Properties

In particolare, \p{IsPf} partite personaggi con la "final punctuation" proprietà, e \p{IsPi} partite charactes con il "initial punctuation" proprietà. Sembrano per lo più chiudere e aprire citazioni.

Il punto della sostituzione sembra spezzare le frasi in righe separate facendo corrispondere la fine e l'inizio di una frase, tenendo conto che una frase può iniziare e terminare con vari tipi di punteggiatura.

+0

Molte grazie. Sia le vostre sia le risposte di Tim sarebbero state perfette ... sfortunatamente devo sceglierne una e non entrambe .. –

3

Come un po 'di informazioni supplementari, unichars da Unicode::Tussle può essere utilizzato per elencare i caratteri corrispondenti.

$ 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 
Problemi correlati