Perl 正規表現


正規表現 (正規表現) は、文字列に特定の部分文字列が含まれているかどうかを確認したり、一致する部分文字列を置換したり、特定の条件の部分文字列を満たす文字列を削除したりするために使用できる文字列の一致パターンを記述します。

Perl 言語の正規表現機能は非常に強力で、基本的に一般的に使用される言語の中で最も強力です。多くの言語は正規表現のサポートを設計するときに Perl の正規表現を参照します。

Perl の正規表現の 3 つの形式は、一致、置換、および変換です:

  • 一致: m/

  • 置換: s/

  • 変換: tr/

この 3 つの形式が一般的に使用されます=~ または !~ の場合、=~ は一致することを意味し、!~ は一致しないことを意味します。


マッチング演算子

マッチング演算子 m// は、文字列ステートメントまたは正規表現とのマッチングに使用されます。たとえば、スカラー $bar の "run" とマッチングするには、コードは次のとおりです。

#!/usr/bin/perl

$bar = "I am php site. welcome to php site.";
if ($bar =~ /run/){
   print "第一次匹配\n";
}else{
   print "第一次不匹配\n";
}

$bar = "run";
if ($bar =~ /run/){
   print "第二次匹配\n";
}else{
   print "第二次不匹配\n";
}

上記を実行します。プログラムの場合、出力結果は次のようになります。

第一次匹配
第二次匹配

パターン マッチング修飾子

パターン マッチングには、次の表に示すように、一般的に使用される修飾子がいくつかあります。 Case

m複数行モードo1回のみ割り当てs単一行モード、「.」は「n」と一致します(デフォルトは一致しません) xパターン内の空白を無視するgグローバルマッチcgグローバルマッチが失敗した後、一致する文字列が再度見つかるようにします

正規表現変数

Perl 処理後、一致した値には 3 つの特別な変数名が存在します:

  • $`: 一致する文字列の最初の部分

  • $&: 一致した文字列

  • $': まだ一致していない残りの文字列

これら3つの変数を組み合わせると、元の文字列が得られます。

例は次のとおりです:

#!/usr/bin/perl

$string = "welcome to php site.";
$string =~ m/run/;
print "匹配前的字符串: $`\n";
print "匹配的字符串: $&\n";
print "匹配后的字符串: $'\n";

上記のプログラムを実行した出力結果は次のとおりです:

匹配前的字符串: welcome to 
匹配的字符串: run
匹配后的字符串: oob site.

置換演算子

置換演算子 s/// は、新しい文字列を使用して指定された文字列を置換する、一致する演算子の拡張です。弦。基本的な形式は次のとおりです。

s/PATTERN/REPLACEMENT/;

PATTERN は一致するパターン、REPLACEMENT は置換文字列です。

例えば、次の文字列の「google」を「php」に置き換えます。

#!/usr/bin/perl

$string = "welcome to google site.";
$string =~ s/google/php/;

print "$string\n";

上記のプログラムを実行した出力結果は次のとおりです。

welcome to php site.

置換演算修飾子

置換演算修飾子は以下のようになります。表:

s修飾子に「s」を追加すると、改行文字を除く任意の文字を表すデフォルトの「.」が、改行文字を含む任意の文字になります。 xこの修飾子を追加すると、エスケープされていない限り、式内の空白文字は無視されます。 g 一致する文字列をすべて置き換えます。 e文字列を式として置換
修飾子説明
i修飾子に「i」を追加すると、正規表現は大文字と小文字の区別をキャンセルします。つまり、「a」と「A」は同じです。
mデフォルトの通常の開始 "^" と終了 "$" は、通常の文字列のみに使用されます。 "m" が修飾子に追加された場合、開始と終了は文字列の各行を参照します。行 先頭は「^」、末尾は「$」です。
o式は一度だけ実行されます。

変換演算子

以下は変換演算子に関連する修飾子です

修飾子説明c不特定のすべてを変換文字d指定された文字をすべて削除s複数の同一の出力文字を1つに圧縮

次の例は、変数 $string 内のすべての小文字を大文字に変換します:

#!/usr/bin/perl 

$string = 'welcome to php site.';
$string =~ tr/a-z/A-z/;

print "$string\n";

上記のプログラムを実行した出力結果は次のとおりです:

WELCOME TO php SITE.

次の例は、/s を使用して変数 $string 内の繰り返し文字を削除します:

#!/usr/bin/perl

$string = 'php';
$string =~ tr/a-z/a-z/s;

print "$string\n";

上記のプログラムを実行すると、出力結果は次のようになります:

runob

その他の例:

$string =~ tr/\d/ /c;     # 把所有非数字字符替换为空格
$string =~ tr/\t //d;     # 删除tab和空格
$string =~ tr/0-9/ /cs    # 把数字间的其它字符替换为一个空格。

その他の正規表現ルール

[a-z][^0-9][^a-z] ^ で始まる文字に一致します $dd+DD+ww+WW+ss+SS+bBa|b|cabc/pattern/i
Expression説明
.は改行を除くすべての文字と一致します
x?はx文字列0または1回と一致します
x* x 文字列と 0 回以上一致しますが、最小可能回数以上一致します
x+ x 文字列と 1 回以上一致しますが、最小可能回数以上一致します
.*は任意の文字と一致します0 回以上
.+は任意の文字に 1 回以上一致します
{m}m 個の指定された文字列に正確に一致します
{m,n}m 個以上一致し、以下に一致しますn 個以上の指定された文字列
{m,} m 個以上の指定された文字列と一致します
[] [] 内の文字と一致します
[^] [] と一致しない文字と一致します
[0-9]はすべての数値文字を一致させる
すべての小文字の文字を一致させる
すべての非数字以外の文字を一致させる
は小文字以外のすべてのアルファベット文字に一致します
は文字の末尾の文字に一致します
に一致します数字文字、[0-9] と同じ構文
は複数の数値文字列、および [0-9]+ 構文は同じ
非数字、その他はd
非数字と同じ、その他はd+
英語の文字または数字の文字列、および[a-zA-Z0 -9]と同じです。構文は次のとおりです。同じ
と [a-zA-Z0-9]+ 構文は同じ
英語以外の文字または数字の文字列、および [^a-zA-Z0- 9] 構文は同じです
と [^a-zA-Z0-9]+ 構文は同じです
spaces と [ntrf] 構文は同じです
および [ntrf ]+ は
非スペースと同じであり、構文は [^ntrf] と同じです
は [^ ntrf]+ であり、構文は同じです
マッチングは英語の文字と数字によって制限されます 文字列
は英語の文字や数値によって制限されない文字列と一致します
は、a 文字、b 文字、または c 文字に一致する文字列と一致します
abc を含む文字列と一致します (パターン) () このシンボルは見つかった文字列を記憶します。これは非常に実用的な構文です。最初の () で見つかった文字列は $1 変数または 1 変数になり、2 番目の () 内で見つかった文字列は $2 変数になります。または 2 変数などです。
i このパラメーターは、英語の大文字と小文字が無視されることを意味します。つまり、文字列を照合するときに、英語の大文字と小文字の区別の問題を考慮します。 「*」などの特殊文字をパターン内で検索したい場合は、その特殊文字が無効になるように、文字の前に記号を追加する必要があります