我正在尝试过滤数千个文件,寻找那些包含混合大小写的字符串常量的文件。此类字符串可以嵌入空格中,但本身可能不包含空格。因此以下(包含 UC 字符)是匹配项:
" AString " // leading and trailing spaces together allowed
"AString " // trailing spaces allowed
" AString" // leading spaces allowed
"newString03" // numeric chars allowed
"!stringBIG?" // non-alphanumeric chars allowed
"R" // Single UC is a match
但这些不是:
"A String" // not a match because it contains an embedded space
"Foo bar baz" // does not match due to multiple whitespace interruptions
"a_string" // not a match because there are no UC chars
我仍然想匹配包含两种模式的行:
"ABigString", "a sentence fragment" // need to catch so I find the first case...
我想使用 Perl 正则表达式,最好由ack命令行工具驱动。显然,\w和\W不会起作用。似乎\S应该匹配非空格字符。我似乎无法弄清楚如何嵌入“每个字符串至少一个大写字符”的要求......
ack --match '\"\s*\S+\s*\"'
是我得到的最接近的。我需要用满足“至少一个大写(ascii)字符(在非空白字符串的任何位置)”要求的东西替换\S+ 。
这在 C/C++ 中编程很简单(是的,Perl,在程序上,不诉诸正则表达式),我只是想弄清楚是否有一个正则表达式可以做同样的工作。