3

这是来自 NHibernate 的 Automapping 配置的字符串。我想知道它有什么作用。

return string.Format("{0}_", Regex.Replace(member.Name, "([a-z](?=[A-Z])|[A-Z](?=[A-Z][a-z]))", "$1_").ToUpper());
4

2 回答 2

7

好吧,让我们分手吧。

//This is the start
([a-z](?=[A-Z])|[A-Z](?=[A-Z][a-z]))

[a-z](?=[A-Z]) //this means to match one lower case a-z followed by an uppercase A-Z
| //or
[A-Z](?=[A-Z][a-z]) //One uppercase A-Z followed by one uppercase and one lowercase a-z

//The replace
$1_ //Replace the match with "the match plus underscore". 
//aBxx would become a_Bxx and ABcxx would be A_Bcxx

图片

于 2013-08-21T08:44:45.693 回答
0

让我们分解一下:

([a-z](?=[A-Z])  

第一部分匹配以大写字符结尾的任何小写字符

|[A-Z](?=[A-Z][a-z]))

或任何以大写然后小写字符结尾的大写字符

例如这将匹配

AAb,第一个“A”是匹配项或

甲乙

'a' 是匹配项。

正则表达式正在使用 http://www.regular-expressions.info/lookaround.html

于 2013-08-21T08:41:26.017 回答