具有多调希腊大写字母的意外正则表达式结果

Unexpected regex results with polytonic Greek capitals

我正在尝试 select 使用正则表达式在多调希腊文本中仅使用大写字母。具体的应用程序是 PHP,但我遇到了麻烦所以我开始在 RegExr 中玩弄它:

https://regexr.com/6ellt

([Α-ΩΗΙΟΥΩᾼῌῼΡΆΈΉΊΌΎΏᾺῈῊῚῸῪῺἈἘἨἸὈὨᾈᾘᾨἌἜἬἼὌὬᾌᾜᾬἊἚἪἺὊὪᾊᾚᾪἎἮἾὮᾎᾞᾮἉἙἩἹὉὙὩᾉᾙᾩῬἍἝἭἽὍὝὭᾍᾝᾭἋἛἫἻὋὛὫᾋᾛᾫἏἯἿὟὯᾏᾟᾯΪΫᾹῙῩᾸῘῨ])

当 JavaScript 引擎被 selected 时,行为符合预期。但是,如果我 select PCRE 不仅是大写字母 selected,还有一堆看似随机的小写字母。

任何人都可以阐明这里发生的事情吗?这是一个错误吗?有没有办法使用 PCRE 引擎得到想要的结果?

您需要告诉 PCRE 正则表达式引擎将输入解析为 Unicode 字符串。

在 PCRE 正则表达式中,您可以在模式前加上 (*UTF) 动词。 (*UTF)[Α-ΩΗΙΟΥΩᾼῌῼΡΆΈΉΊΌΎΏᾺῈῊῚῸῪῺἈἘἨἸὈὨᾈᾘᾨἌἜἬἼὌὬᾌᾜᾬἊἚἪἺὊὪᾊᾚᾪἎἮἾὮᾎᾞᾮἉἙἩἹὉὙὩᾉᾙᾩῬἍἝἭἽὍὝὭᾍᾝᾭἋἛἫἻὋὛὫᾋᾛᾫἏἯἿὟὯᾏᾟᾯΪΫᾹῙῩᾸῘῨ] 突出显示正确的匹配项。

但是,您也可以使用

使其更短一些
(*UTF)(?=\p{Lu})\p{Greek}

这里,

  • (*UTF) - 告诉 PCRE 引擎输入是 Unicode 字符串的 PCRE 动词
  • (?=\p{Lu}) - 要求下一个字符为大写字符的正向前瞻
  • \p{Greek} - 希腊字符。

请注意,如果您的 PCRE 实现中有 u 标志支持,这很可能是可行的方法(如 PHP、/(?=\p{Lu})\p{Greek}/u)。