gpt4 book ai didi

c# - 使用正则表达式匹配 C# Unicode 标识符

转载 作者:太空狗 更新时间:2023-10-29 22:24:32 25 4
gpt4 key购买 nike

使用 .Net Regex 模式匹配 C# 标识符(特别是属性或字段名称)的正确方法是什么?

背景。我曾经使用以 ASCII 为中心的 @"[_a-zA-Z][_a-zA-Z0-9]*"但现在 unicode 大小写字符是合法的,例如“AboöДЖem”。我应该如何将这些包含在模式中?

谢谢,最大

最佳答案

这是一个考虑了不允许的前导数字的版本:

^(?:((?!\d)\w+(?:\.(?!\d)\w+)*)\.)?((?!\d)\w+)$

下面是 PowerShell 中的一些测试:

[regex]$regex = '(?x:
^ # Start of string
(?:
( # Namespace
(?!\d)\w+ # Top-level namespace
(?:\.(?!\d)\w+)* # Subsequent namespaces
)
\. # End of namespaces period
)? # Namespace is optional
((?!\d)\w+) # Class name
$ # End of string
)'
@(
'System.Data.Doohickey'
'_1System.Data.Doohickey'
'System.String'
'System.Data.SqlClient.SqlConnection'
'DoohickeyClass'
'Stackoverflow.Q4400348.AboöДЖem'
'1System.Data.Doohickey' # numbers not allowed at start of namespace
'System.Data.1Doohickey' # numbers not allowed at start of class
'global::DoohickeyClass' # "global::" not part of actual namespace
) | %{
($isMatch, $namespace, $class) = ($false, $null, $null)
if ($_ -match $regex) {
($isMatch, $namespace, $class) = ($true, $Matches[1], $Matches[2])
}
new-object PSObject -prop @{
'IsMatch' = $isMatch
'Name' = $_
'Namespace' = $namespace
'Class' = $class
}
} | ft IsMatch, Name, Namespace, Class -auto

关于c# - 使用正则表达式匹配 C# Unicode 标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4400348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com