大文字と小文字が混在する文字列定数を含むファイルを探して、何千ものファイルをフィルタリングしようとしています。このような文字列は空白に埋め込むことができますが、空白自体を含めることはできません。したがって、次の (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 regexps を使用したいのですが、できればackコマンドライン ツールによって駆動されます。明らかに、\wと\Wは機能しません。\Sは、スペース以外の文字と一致する必要があるようです。「文字列ごとに少なくとも1つの大文字」の要件を埋め込む方法を理解できないようです...
ack --match '\"\s*\S+\s*\"'
私が得た最も近いものです。\S+を、「少なくとも 1 つの大文字 (ASCII) 文字 (非空白文字列の任意の位置)」の要件を満たすものに置き換える必要があります。
これは C/C++ でプログラムするのは簡単です (そうです、正規表現に頼らずに手続き的に Perl を使用します)。