我正在从 perl 翻译代码,我遇到了以下行
$text =~ s/([?!\.][\ ]*[\'\"\)\]\p{IsPf}]+) +([\'\"\(\[\¿\¡\p{IsPi}]*[\ ]*[\p{IsUpper}])/$1\n$2/g;
我的问题是,\p{IsPf} 和\p{IsPi} 匹配什么?我试过在网上搜索它,但没有找到任何东西......
最佳答案
\p{..}
按 unicode 字符属性匹配字符:http://perldoc.perl.org/perlunicode.html#Unicode-Character-Properties
特别是\p{IsPf}
匹配具有“final punctuation ”属性和 \p{IsPi}
的字符匹配具有“initial punctuation”属性的字符。这些似乎主要是收盘和开盘报价。
替换的要点似乎是通过匹配句子的结尾和开头将句子分成单独的行,考虑到句子可能以各种类型的标点符号开头和结尾。
关于regex - 一些 perl 正则表达式的含义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16916329/