我在.todo文件中搜索以下单词:
ZshTabCompletionBackward
MacTerminalIterm
Run Code Online (Sandbox Code Playgroud)
我做了以下正则表达式
[A-Z]{1}[a-z]*[A-Z]{1}[a-z]*
Run Code Online (Sandbox Code Playgroud)
但是,这还不够,因为它只找到以下类型的单词
ZshTab
Run Code Online (Sandbox Code Playgroud)
在伪代码中,我试图制作以下正则表达式
([A-Z]{1}[a-z]*[A-Z]{1}[a-z]*){1-9}
Run Code Online (Sandbox Code Playgroud)
你如何在Perl中制作上述正则表达式?
bri*_*foy 21
我想你想要这样的东西,用/x旗帜写下来添加评论和无关紧要的空白:
/
\b # word boundary so you don't start in the middle of a word
( # open grouping
[A-Z] # initial uppercase
[a-z]* # any number of lowercase letters
) # end grouping
{2,} # quantifier: at least 2 instances, unbounded max
\b # word boundary
/x
如果你想要它没有花哨的格式,只需删除空格和注释:
/\b([A-Z][a-z]*){2,}\b/
正如j_random_hacker指出的那样,这有点简单,因为它将匹配一个只是连续大写字母的单词.他的解决方案,我已经扩展/x以显示一些细节,确保至少一个小写字母:
/
\b # start at word boundary
[A-Z] # start with upper
[a-zA-Z]* # followed by any alpha
(?: # non-capturing grouping for alternation precedence
[a-z][a-zA-Z]*[A-Z] # next bit is lower, any zero or more, ending with upper
| # or
[A-Z][a-zA-Z]*[a-z] # next bit is upper, any zero or more, ending with lower
)
[a-zA-Z]* # anything that's left
\b # end at word
/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/
我在Learning Perl中解释了所有这些功能.
假设您没有使用正则表达式进行提取,只是匹配...
[A-Z][a-zA-Z]*
Run Code Online (Sandbox Code Playgroud)
这不是唯一真正要求它是所有字母并以大写字母开头吗?
brian's和sharth的答案也将报告完全由大写字母组成的单词(例如FOO).这可能是也可能不是你想要的.如果您想限制只包含至少一个小写字母的驼峰式单词,请使用:
/\b[A-Z][a-zA-Z]*[a-z][a-zA-Z]*\b/
Run Code Online (Sandbox Code Playgroud)
如果您希望排除由单个大写字母后跟任意数量的小写字母组成的单词(例如Perl),请使用:
/\b[A-Z][a-zA-Z]*(?:[a-z][a-zA-Z]*[A-Z]|[A-Z][a-zA-Z]*[a-z])[a-zA-Z]*\b/
Run Code Online (Sandbox Code Playgroud)
(基本上,我们要求字符串以大写字母开头并包含至少一个额外的大写字母和一个小写字母;后两个字母可以按任意顺序出现.)