正規表現のグループを小文字バージョンに置き換えることができる正規表現の実装はありますか?
6 に答える
正規表現のバージョンがサポートしている場合は、POSIX シェルのように \L を使用できます。
sed -r 's/(^.*)/\L\1/'
In Perl, you can do:
$string =~ s/(some_regex)/lc($1)/ge;
The /e
option causes the replacement expression to be interpreted as Perl code to be evaluated, whose return value is used as the final replacement value. lc($x)
returns the lowercased version of $x
. (Not sure but I assume lc()
will handle international characters correctly in recent Perl versions.)
/g
グローバルに一致することを意味します。g
1 つの置換のみが必要な場合は、を省略します。
SublimeText や TextMate 1などのエディターを使用している場合は、使用する可能性が高くなります
\L$1
置換として、 where$1
は、括弧で囲んだ正規表現の何かを指します。例2では、SQL でフィールド名を小文字に変換するために使用したものを次に示します。指定された行の末尾にある「as」の右側にすべてを取得します。最初に「検索」正規表現:
(as|AS) ([A-Za-z_]+)\s*,$
そして、置換式:
$1 '\L$2',
Vim (またはおそらく gvim) を使用する場合は、\L\1
代わりにを使用\L$1
する必要がありますが、注意する必要がある別の問題があります。Vim は、リテラルの括弧文字とエスケープされた括弧文字の間の構文を逆にします。したがって、正規表現の一部を置換に含める (「キャプチャする」) ように指定するには\(
、最初と\)
最後に使用します。\
特殊文字をエスケープしてリテラルにするのではなく、特殊文字の開始をマークする ( \s
、など\w
のように) と考えてください\b
。そのため、慣れていないと奇妙に思えるかもしれませんが、Vim の考え方で考えると、実際には完全に論理的です。
1 TextMate と SublimeText の両方でこれをテストしましたが、そのままで動作しますが、一部のエディター
\1
は$1
. 両方を試して、エディタがどちらを使用しているかを確認してください。
2この正規表現を履歴から削除しました。私は常に正規表現を使用しながら微調整していますが、これが最終バージョンであることを約束することはできません。正規表現での小文字化の具体例。YMMV。UAYOR。
の使用についていくつかの回答が指摘されています\L
。ただし、\E
を使用するかどうかについても知っておく価値があります\L
。
\L
\U
すべてを次または\E
小文字に変換します。...\E
大文字と小文字の変換をオフにします。(出典: https://www.regular-expressions.info/replacecase.html )
rename
したがって、次のように一部のファイル名の一部を小文字にするために使用したいとします。
artist_-_album_-_Song_Title_to_be_Lowercased_-_MultiCaseHash.m4a
artist_-_album_-_Another_Song_Title_to_be_Lowercased_-_MultiCaseHash.m4a
次のようなことができます:
rename -v 's/^(.*_-_)(.*)(_-_.*.m4a)/$1\L$2\E$3/g' *
Perlには、
$string =~ tr/[A-Z]/[a-z]/;
ほとんどの Regex 実装では、置換を行うときにコールバック関数を渡すことができるため、コールバックから一致の小文字バージョンを単純に返すことができます。