58

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

4

6 に答える 6

62

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

sed -r 's/(^.*)/\L\1/'
于 2009-05-15T19:45:10.337 に答える
39

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グローバルに一致することを意味します。g1 つの置換のみが必要な場合は、を省略します。

于 2009-01-09T11:08:12.180 に答える
19

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。

于 2014-01-23T15:52:38.977 に答える
13

の使用についていくつかの回答が指摘されています\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' *
于 2018-03-22T23:55:48.777 に答える
3

Perlには、

$string =~ tr/[A-Z]/[a-z]/;
于 2009-01-09T10:47:05.233 に答える
2

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

于 2009-01-09T10:50:39.190 に答える