1. ホーム
  2. regex

[解決済み] 10回以上繰り返される文字にマッチする正規表現

2022-06-05 05:49:35

質問

同じ文字が10回以上繰り返されている場合にマッチする簡単な正規表現を探しています。例えば、横線が散乱している文書があったとします。

=================================================

の行にマッチします。 = の文字が10回以上繰り返されているため、マッチします。 にも使えるようにしてほしいということです。 任意の の文字で動作させたい。

どのように解決するのですか?

必要な正規表現は /(.)\1{9,}/ .

テストします。

#!perl
use warnings;
use strict;
my $regex = qr/(.)\1{9,}/;
print "NO" if "abcdefghijklmno" =~ $regex;
print "YES" if "------------------------" =~ $regex;
print "YES" if "========================" =~ $regex;

ここでは \1 は後方参照と呼ばれます。これは、ドットで捕捉されたものを参照する . という括弧の間にある (.) を指定し、その後に {9,} は同じ文字が9個以上あるかどうかを尋ねます。したがって、これは任意の一文字の10個以上と一致します。

上記のテストスクリプトはPerlで書かれていますが、これは非常に標準的な正規表現の構文であり、どの言語でも動作するはずです。例えば Emacs では \(.\)\1\{9,\} というように書きます。

文字列全体が9文字以上の同一文字で構成されるべき場合、パターンの周囲にアンカーを追加します。

my $regex = qr/^(.)\1{9,}$/;