我從翻譯Perl代碼和我來翻過以下行perl的正則表達式的意義?
$text =~ s/([?!\.][\ ]*[\'\"\)\]\p{IsPf}]+) +([\'\"\(\[\¿\¡\p{IsPi}]*[\ ]*[\p{IsUpper}])/$1\n$2/g;
我的問題是,什麼是\ p {} ISPF和\ p {} ISPI比賽?我試過在網上搜索它,但還沒有找到任何東西...
我從翻譯Perl代碼和我來翻過以下行perl的正則表達式的意義?
$text =~ s/([?!\.][\ ]*[\'\"\)\]\p{IsPf}]+) +([\'\"\(\[\¿\¡\p{IsPi}]*[\ ]*[\p{IsUpper}])/$1\n$2/g;
我的問題是,什麼是\ p {} ISPF和\ p {} ISPI比賽?我試過在網上搜索它,但還沒有找到任何東西...
讓我們來問問RegexBuddy:這是一個Unicode字符屬性。
你可以找到更多documentation on Unicode character properties and Unicode scripts here。
非常感謝!xD –
\p{..}
匹配的字符可以通過Unicode字符屬性:http://perldoc.perl.org/perlunicode.html#Unicode-Character-Properties
特別地,\p{IsPf}
匹配與「final punctuation」的字符組成,並\p{IsPi}
匹配與「initial punctuation」屬性本地字符。這些似乎大多是封閉和開盤報價。
考慮到句子可能以各種類型的標點符號開始和結束,替換的觀點似乎是通過匹配句子的結尾和句首將句子分成單獨的行。
非常感謝。您和Tim的答案都是完美的......不幸的是我必須選擇一個而不是兩個。 –
作爲一些額外的信息,unichars
from 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
順便說一句:該正則表達式中有很多不需要的反斜槓和兩個不必要的捕獲。 's/[?!。] [] * ['「)\] \ p {IsPf}] + \ K +(?= [''([{p {IsPi}] * [] * [\ p {IsUpper}])/ \ n/g'應該等同於實際目的。 – amon