【问题标题】:How to match Cyrillic characters with a regular expression如何将西里尔字符与正则表达式匹配
【发布时间】:2010-12-15 13:18:34
【问题描述】:

如何使用正则表达式匹配法语和俄语西里尔字母字符?我只想做字母字符,没有数字或特殊字符。现在我有

[A-Za-z]

【问题讨论】:

  • 看这个问题:Regex and unicode
  • 这里是:[А-Яа-я]
  • @AlexErygin 仅限俄语字符:[ЁёА-я](其中А 是俄语)。俄语 а 的 unicode 代码就在 Я 之后,因此您不需要 2 个范围。 Ёё的unicode码不在А-я之间,所以需要单独指定Ёё。

标签: regex unicode character-properties


【解决方案1】:

如果您的regex 风格支持Unicode 块 ([\p{IsCyrillic}]),您可以将西里尔文 字符匹配为:

[\p{IsCyrillic}] or [\p{Cyrillic}]

否则尝试使用:

[U+0400–U+04FF]

对于PHP 使用:

[\x{0400}-\x{04FF}]

说明:

[\p{IsCyrillic}]

Match a character from the Unicode block “Cyrillic” (U+0400–U+04FF) «[\p{IsCyrillic}]»

注意:

[U+0400–U+04FF] 的 Unicode 字符列表和数字 HTML 实体。

【讨论】:

【解决方案2】:

这取决于您的正则表达式风格。如果它支持 Unicode 字符类(例如 .NET),\p{L} 匹配一个字母字符(在任何字符集中)。

【讨论】:

  • 用 Java 做这个怎么样?
  • 这将匹配任何个西里尔字符,包括那些不在俄语字母表中的字符(Greg 询问的是俄语西里尔字母)
  • 在 Javascript 中,您还需要添加标志 'u'。见javascript.info/regexp-unicode
  • 注意:来自 JavaScript 的 p{L} 目前在 Safari 中不起作用。
【解决方案3】:

要仅匹配 俄语 西里尔字符,请使用:

[\u0401\u0451\u0410-\u044f]

相当于:

[ЁёА-я]

А 是西里尔字母,而不是拉丁字母。 (尽管看起来相同,但它们有不同的代码)

\p{IsCyrillic}\p{Cyrillic}[\u0400-\u04FF] 其他人建议将匹配 all variants of Cyrillic,而不仅仅是俄语

【讨论】:

    【解决方案4】:

    如果您使用现代 PHP 版本 - 只需:

    preg_match("/^[\p{L}]+$/u");
    

    不要忘记支持 unicode 的 u 标志!

    【讨论】:

    • 你能解释一下你的正则表达式吗?我用Бори́с 试过,但不匹配,所以你的正则表达式不起作用。
    • 很简单,请看:php.net/manual/en/regexp.reference.unicode.php“L”表示任意字母。所以“и́”符号应该在其他组中!试着找到它。
    【解决方案5】:

    正则表达式将西里尔字母与普通(英文)字母匹配:

    ^[A-Za-z.!@?#"$%&:;() *\+,\/;\-=[\\\]\^_{|}<>\u0400-\u04FF]*$
    

    匹配特殊字符、西里尔字母、英文字母。

    【讨论】:

    • 非英文字母不正常???更何况只有1个英文字母
    【解决方案6】:

    各种正则表达式方言使用[:alpha:] 表示当前语言环境中的任何字母数字字符。 (你可能需要把它放在一个字符类中,例如[[:alpha:]]。)

    【讨论】:

    • 这也适用于 PostgreSQL,但匹配所有国家字符(因此不仅是当前语言环境)。您还可以使用[[:lower:]][[:upper:]] 来匹配特定情况。例如。替换小写字符:regexp_replace(firstname, '[[:lower:]]', 'a', 'g').
    【解决方案7】:

    这对我有用

    [a-z\u0400-\u04FF]
    

    【讨论】:

    • 仅匹配西里尔字符使用[\u0400-\u04FF]
    【解决方案8】:

    如果你使用 Elixir:

    String.match?(string, ~r/^\p{Cyrillic}*$/u)
    

    您需要添加 u 标志以获得 unicode 支持。

    【讨论】:

    • 注意,上面的正则表达式对于空字符串返回trueString.match?("", ~r/^\p{Cyrillic}*$/u) => true。您应该更改 * 修饰符为 + 来解决这个问题。
    【解决方案9】:

    在 Java 中匹配西里尔字母和空格使用以下模式

    ^[\p{InCyrillic}\s]+$
    

    【讨论】:

      猜你喜欢
      • 2013-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多