locale什么时候影响R的正则表达式?

Ric*_*ton 8 regex locale r

R 有几个用于正则表达式的特殊的与语言环境无关的字符类。

\n\n

?regex

\n\n
\n

\xe2\x80\x98[[:alnum:]]\xe2\x80\x99 表示 \xe2\x80\x98[0-9A-Za-z]\xe2\x80\x99,但后者\n 取决于区域设置和字符编码,而前者独立于区域设置和字符集。

\n
\n\n

我想知道何时会出现特定于区域设置的问题。

\n\n

我根据中的信息尝试了两个例子?Comparison,描述了字符串的排序方式:

\n\n
\n

在爱沙尼亚语中, \xe2\x80\x98Z\xe2\x80\x99 位于 \xe2\x80\x98S\xe2\x80\x99 和 \xe2\x80\x98T\xe2\x80\x99 之间

\n
\n\n

\n\n
\n

在丹麦语中 \xe2\x80\x98aa\xe2\x80\x99 在 \xe2\x80\x98z\xe2\x80\x99 之后排序为单个字母

\n
\n\n

在第一个示例中,我希望 T、U、V、W、X 和 Y 不匹配。在第二个示例中,我希望 aa 不匹配。

\n\n
Sys.setlocale("LC_ALL", "Estonian")\ngrepl("[A-Z]", LETTERS)\n\nSys.setlocale("LC_ALL", "Danish")\ngrepl("[a-z]", "aa")  \n
Run Code Online (Sandbox Code Playgroud)\n\n

由于所有值都返回TRUE,因此区域设置在这里似乎不是问题。

\n\n

你能找到一个例子,其中区域设置导致传统的正则表达式类,例如[a-z]失败的示例吗?

\n\n

更新:我有一个部分答案:带重音的罗马字符使用[a-zA-Z]与使用时的行为不同。[[:alpha:]]行为有所不同。我仍然有兴趣知道是否有更多差异示例,以及区域设置或编码是否影响非罗马字符的匹配,以及如何匹配非罗马字符。

\n

Ric*_*ton 2

带口音的罗马字符的行为似乎有所不同。

\n\n
grepl("[a-zA-Z]", c("\xc3\xa5", "\xc3\xa9"))\n## [1] FALSE FALSE\ngrepl("[[:alpha:]]", c("\xc3\xa5", "\xc3\xa9"))\n## [1]  TRUE  TRUE\n
Run Code Online (Sandbox Code Playgroud)\n\n

奇怪的是,非罗马字符无法匹配任一字符类(至少在我尝试过的少数语言环境和编码中)。

\n\n
mu <- "\\U03BC"\nya <- "\\U044F"\njeem <- "\\U062C"\ngrepl("[a-zA-Z]+", c(mu, ya, jeem))\n## [1] FALSE FALSE FALSE\ngrepl("[[:alpha:]]", c(mu, ya, jeem))\n## [1] FALSE FALSE FALSE\n
Run Code Online (Sandbox Code Playgroud)\n