PCRE2正则字符组内锚点字符匹配喷泉字符的原因咨询
问题原因解释
先明确两个 emoji 的 Unicode 构成:
⚓️由 U+2693(锚基础符号) + U+FE0F(变体选择符-16,用于将符号显示为彩色 emoji 样式) 两个独立码点组成⛲️由 U+26F2(喷泉基础符号) + U+FE0F 两个独立码点组成
PCRE2 的行为逻辑:
在 UTF-8 模式下,PCRE2 会把字符组[⚓️]拆分为单个 Unicode 码点处理,等价于正则[\x{2693}\x{FE0F}]——即匹配 U+2693 或 U+FE0F 任意一个码点。由于⛲️包含 U+FE0F 码点,因此会被匹配命中。PCRE1 的行为逻辑:
PCRE1 处理字符组中的多码点 emoji 时,会将整个⚓️序列视为不可拆分的匹配单元,因此[⚓️]仅匹配完整的⚓️emoji,不会单独匹配其中的 U+FE0F 码点,所以对⛲️无匹配结果。解决思路:
若要精确匹配完整的⚓️emoji,要么直接写精确匹配正则⚓️,要么在字符组中明确指定仅匹配基础码点,比如[\x{2693}]。
内容的提问来源于stack exchange,提问作者devope
相关产品推荐
相关产品推荐

