web-dev-qa-db-ja.com

グループを小文字バージョンに置き換える正規表現の実装

正規表現のグループを小文字のバージョンに置き換えることができる正規表現の実装はありますか?

50
berek

Perlでは、次のことができます。

_$string =~ s/(some_regex)/lc($1)/ge;
_

_/e_オプションを使用すると、置換式が評価されるPerlコードとして解釈され、その戻り値が最終的な置換値として使用されます。 lc($x)は、小文字のバージョンの_$x_を返します。 (確かではありませんが、lc()は最近のPerlバージョンで国際文字を正しく処理すると想定しています。)

_/g_は、グローバルに一致することを意味します。単一の置換のみが必要な場合は、gを省略します。

35
j_random_hacker

正規表現バージョンでサポートされている場合、POSIXシェルでのように\ Lを使用できます。

sed -r 's/(^.*)/\L\1/'
59
Kim André Sand

いくつかの回答は、\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' *
6
sampablokuper

Perlには、

$string =~ tr/[A-Z]/[a-z]/;
3
Hank Gay

ほとんどのRegex実装では、置換を行うときにコールバック関数を渡すことができるため、コールバックから小文字バージョンの一致を単純に返すことができます。

2
AnthonyWJones