67

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

[A-Z-Z]

4

9 回答 9

52

如果您的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}]»

笔记:

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

于 2011-06-14T10:50:03.700 回答
39

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

于 2009-11-11T19:57:12.563 回答
17

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

[\u0401\u0451\u0410-\u044f]

这相当于:

[ЁёА-я]

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

\p{IsCyrillic}, \p{Cyrillic},[\u0400-\u04FF]其他人建议将匹配西里尔文的所有变体,而不仅仅是俄语

于 2018-09-10T11:48:04.667 回答
10

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

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

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

于 2014-07-29T13:31:50.470 回答
7

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

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

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

于 2017-01-30T09:53:08.997 回答
5

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

于 2009-11-11T17:22:04.687 回答
5

这对我有用

[a-z\u0400-\u04FF]
于 2018-05-25T07:58:14.553 回答
2

如果您使用 Elixir:

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

您需要u为 unicode 支持添加标志。

于 2019-01-12T12:48:43.313 回答
-2

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

^[\p{InCyrillic}\s]+$
于 2019-08-07T10:00:33.617 回答