我在 .todo 文件中搜索以下单词:
ZshTabCompletionBackward
MacTerminalIterm
我做了以下正则表达式
[A-Z]{1}[a-z]*[A-Z]{1}[a-z]*
然而,这还不够,因为它只找到以下类型的词
ZshTab
在伪代码中,我正在尝试制作以下正则表达式
([A-Z]{1}[a-z]*[A-Z]{1}[a-z]*){1-9}
如何在 Perl 中制作上述正则表达式?
最佳答案
我想你想要这样的东西,用 /x
写的添加注释和无关紧要的空格的标志:
/
\b # 单词边界,因此您不会从单词中间开始
( # 打开分组
[A-Z] # 首字母大写
[a-z]* # 任意数量的小写字母
) # 结束分组
{2,} # 量词:至少 2 个实例,最大无界
\b # 词边界
/X
如果你想要它没有花哨的格式,只需删除空格和注释:
/\b([A-Z][a-z]*){2,}\b/
正如 j_random_hacker 指出的那样,这有点简单,因为它将匹配一个只是连续大写字母的单词。他的解决方案,我已经扩展了 /x
要显示一些细节,请确保至少有一个小写字母:
/
\b # 从单词边界开始
[A-Z] # 从上开始
[a-zA-Z]* # 后跟任何字母
(?: # 交替优先级的非捕获分组
[a-z][a-zA-Z]*[A-Z] # 下一位是低位,任何零或更多,以高位结束
| # 或者
[A-Z][a-zA-Z]*[a-z] # 下一位是高位,任意零或多个,以低位结束
)
[a-zA-Z]* # 剩下的任何东西
\b # 以单词结束
/X
如果你想要它没有花哨的格式,只需删除空格和注释:
/\b[AZ][a-zA-Z]*(?:[az][a-zA-Z]*[AZ]|[AZ][a-zA-Z]*[az])[a- zA-Z]*\b/
我在 Learning Perl 中解释了所有这些功能.
关于regex - 什么 Perl 正则表达式可以匹配 CamelCase 单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/815787/