匹配骆驼和帕斯卡案例的正则表达式

Posted

技术标签:

【中文标题】匹配骆驼和帕斯卡案例的正则表达式【英文标题】:Regex that matches Camel and Pascal Case 【发布时间】:2011-01-07 09:32:27 【问题描述】:

我即将为一种语言编写一个解析器,该语言应该对类型、变量等的命名有严格的句法规则。例如,所有类必须为 PascalCase,所有变量/参数名称和其他标识符必须为 camelCase。

例如,htmlParser 是不允许的,必须命名为 HtmlParser。任何可以匹配 PascalCase 但其中没有两个大写字母的正则表达式的想法?

【问题讨论】:

我认为最后一句应该是“...但是里面没有两个连续的大写字母?” 假设我想用那种语言编写一个 C 预处理器。我必须命名我的类 Cpreprocessor 吗?是否允许使用下划线(C_Preprocessor)? H 是一个有效的类名吗? @Chris 是的,它不应该有 2 个连续的大写字母。不允许使用 C_preprocessor,它必须是 PreprocessorForC 或类似的东西。 【参考方案1】:

驼峰式:

^[a-z]+(?:[A-Z][a-z]+)*$

PascalCase:

^[A-Z][a-z]+(?:[A-Z][a-z]+)*$

【讨论】:

由于某种原因,上述方法都不适合我。但是,以下是 (?:[a-z]+|[A-Z]+|^)([a-z]|\d)* (如果您不想包含数字,请删除 |\d。【参考方案2】:
/([A-Z][a-z]+)*[A-Z][a-z]*/

但我不得不说你的命名选择很糟糕,应该允许和首选 HTMLParser。

【讨论】:

+1 表示正则表达式和对命名约定的评论,两者看起来都与我要发布的内容可疑地相似,但我会将正则表达式简化为 /(?:[A-Z][a-z]+)+/(我不认为OP 关注的是允许AaA 作为类名)。 是的,我考虑过,但认为 AaA 没有两个连续的大写字母。该方案尚未解决的一个更大的问题是数字,它们是算作上、下还是两者都算? 它缺少一些细节——比如数字,但它似乎可以工作。【参考方案3】:

^[A-Z][a-z]*([A-Z][a-z]*)

这应该适用于:

    轻松搞定 太棒了 和我

这种类型的模式。

【讨论】:

【参考方案4】:

我不相信列出的项目可以以数字开头(我认为我在某处读过它,所以请谨慎对待)所以最好的情况是像 Roger Pate 的一些小修改(在我看来)

/^([A-Z][a-z0-9]+)*[A-Z][a-z0-9]*$/

应该是这样的,寻找一个大写字母,然后是至少一个小写字母或数字,或者更多,而且看起来它只处理一个大写字母,因为这似乎是必需的,但额外的字母是可选。

祝你好运

【讨论】:

/([A-Z][a-z0-9]+)*[A-Z][a-z0-9]*/.test("HELLO")true,它需要^$

以上是关于匹配骆驼和帕斯卡案例的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

python-正则表达式语法规范与案例

Java提取文本文档中的所有网址(小案例介绍正则基础知识)

架构思维案例:速学正则

全网最全正则表达式系统讲解,实战练习,豆瓣案例解析(附讲解源代码)

php中的正则表达式具体的说明案例

正则表达式