regex /(.)\1{9,}/
ที่คุณต้องการ
ทดสอบ:
use warnings;
use strict;
my $regex = qr/(.)\1{9,}/;
print "NO" if "abcdefghijklmno" =~ $regex;
print "YES" if "------------------------" =~ $regex;
print "YES" if "========================" =~ $regex;
ที่นี่\1
เรียกว่า backreference มันอ้างอิงถึงสิ่งที่จับโดยจุด .
ระหว่างวงเล็บ(.)
และจากนั้น{9,}
ขอให้เก้าตัวขึ้นไปของอักขระเดียวกัน ดังนั้นจึงจับคู่อักขระเดี่ยวสิบตัวขึ้นไป
แม้ว่าสคริปต์ทดสอบข้างต้นจะอยู่ใน Perl แต่นี่เป็นไวยากรณ์ regex มาตรฐานมากและควรทำงานในภาษาใดก็ได้ ในบางรูปแบบคุณอาจต้องใช้แบ็กสแลชมากกว่านี้เช่น Emacs จะทำให้คุณเขียน\(.\)\1\{9,\}
ที่นี่
หากสตริงทั้งหมดควรประกอบด้วยอักขระที่เหมือนกัน 9 ตัวขึ้นไปให้เพิ่มจุดยึดรอบรูปแบบ:
my $regex = qr/^(.)\1{9,}$/;