我该如何用正则表达式匹配法语和俄语西里尔字母的字符? 我只想匹配字母,不包括数字或特殊字符。 目前我有:
[A-Za-z]
我该如何用正则表达式匹配法语和俄语西里尔字母的字符? 我只想匹配字母,不包括数字或特殊字符。 目前我有:
[A-Za-z]
如果你的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实体。
php
,请尝试使用 [\x{0400}-\x{04FF}]
。https://regex101.com/r/zcRenT/1 - Pedro Lobito\p{Cyrillic}
,你只需要确保在正则表达式上添加u标志。 - donatJ这取决于你使用的正则表达式引擎。如果它支持Unicode字符类(例如.NET),\p{L}
匹配任何字符集中的字母字符。
要匹配仅俄语西里尔字母,请使用:
[\u0401\u0451\u0410-\u044f]
这相当于:
[ЁёА-я]
其中А
是西里尔字母,不是拉丁字母(尽管看起来相同但它们有不同的代码)
\p{IsCyrillic}
, \p{Cyrillic}
, [\u0400-\u04FF]
这些被其他人建议的方式将匹配所有西里尔字母变种,而不仅仅是俄语。
如果您使用现代版本的PHP - 只需:
preg_match("/^[\p{L}]+$/u");
不要忘记添加u标志来支持Unicode!
Бори́с
试了一下,但是没有匹配成功,所以你的正则表达式不起作用。 - Black用于匹配西里尔字母和正常(英语)字母的正则表达式:
^[A-Za-z.!@?#"$%&:;() *\+,\/;\-=[\\\]\^_{|}<>\u0400-\u04FF]*$
它可以匹配特殊字符、西里尔字母和英文字母。
这对我有用
[a-z\u0400-\u04FF]
[\u0400-\u04FF]
。 - Boykodev在各种正则表达式方言中,[:alpha:]
用于表示当前语言环境下的任何字母数字字符。(您可能需要将其放入字符类中,例如 [[:alpha:]]
。)
[[:lower:]]
和 [[:upper:]]
来匹配特定的大小写。例如,替换小写字符:regexp_replace(firstname, '[[:lower:]]', 'a', 'g')
。 - NuxString.match?(string, ~r/^\p{Cyrillic}*$/u)
u
标志以支持Unicode。true
:String.match?("", ~r/^\p{Cyrillic}*$/u)
=> true
。你应该将*
修饰符改为+
来解决这个问题。 - belgoros[А-я]+
对于现代 PHP(来源):
$string = 'тест тест Тест Обязателльно Stackoverflow >!<';
var_dump(preg_replace('/[\x{0410}-\x{042F}]+.*[\x{0410}-\x{042F}]+/iu', '', $string));
[ЁёА-я]
**(其中А
是俄语字母)。俄语字母а
的 Unicode 代码紧随在Я
后面,因此您不需要使用两个范围。字母Ёё
的 Unicode 代码不在А-я
范围内,因此您需要单独指定。 - CITBL