这是来自 NHibernate 的 Automapping 配置的字符串。我想知道它有什么作用。
return string.Format("{0}_", Regex.Replace(member.Name, "([a-z](?=[A-Z])|[A-Z](?=[A-Z][a-z]))", "$1_").ToUpper());
这是来自 NHibernate 的 Automapping 配置的字符串。我想知道它有什么作用。
return string.Format("{0}_", Regex.Replace(member.Name, "([a-z](?=[A-Z])|[A-Z](?=[A-Z][a-z]))", "$1_").ToUpper());
好吧,让我们分手吧。
//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
让我们分解一下:
([a-z](?=[A-Z])
第一部分匹配以大写字符结尾的任何小写字符
|[A-Z](?=[A-Z][a-z]))
或任何以大写然后小写字符结尾的大写字符
例如这将匹配
AAb,第一个“A”是匹配项或
甲乙
'a' 是匹配项。
正则表达式正在使用 http://www.regular-expressions.info/lookaround.html