【发布时间】:2020-09-23 11:11:34
【问题描述】:
尽管我偶然发现了这个问题,因为我编写的 PHP 正则表达式未能以我预期的方式匹配它,但我不确定这是否是正确的地方。毕竟,PHP 中的定义(可能还有其他支持 Unicode 的正则表达式引擎)似乎与官方分类相匹配(参见例如 https://www.fileformat.info/info/unicode/char/201e/index.htm),我对这个官方分类很不满意。
据此,DOUBLE LOW-9 QUOTATION MARK 被归类为Ps(因此与/\p{Ps}/ 匹配),尽管它的名字,但不是Pi(首引号),用于德语。它甚至没有进入不太具体的“标点符号,初始引用(可能表现得像Ps 或Pe,具体取决于用法)”类别。这种(错误)分类的原因可能是什么?在哪些语言中,它实际上用作Ps(即类似于"(" 或"[" 或"{")?
但最重要的是:什么是合适的正则表达式,它涵盖所有语言中的各种引号而不枚举太多单独的代码点?
【问题讨论】:
-
如果你有一个像
[\p{Pi}\x{201E}]这样的字符类设置,也许它会起作用?不确定Pi是否会缺少其他引号。 -
此外,如果您想深入了解,可以在here 找到用作括号的任何此类引号的列表。快速扫描告诉我有几个属于
Ps、Pe和Pf -
我的猜测是它被用作初始标点符号在德语中,但不一定在其他地方。也许它的用途太模糊而不能被普遍归类为一种或另一种。
-
@deceze Dutch 过去也使用了“,尽管我们似乎后来改用了”。
-
/[\x{FE41}-\x{FE44}\x{FF02}\x{FF07}\x{FF62}-\x{FF63}\x{2018}-\x{201F}\x{2039}-\x{203A}\x{300C}-\x{300F}\x{301D}-\x{301F}\x{2E42}\x{22}\x{27}\x{AB}\x{BB}]/u涵盖所有代码点Quotation_Mark= Y