use strict;
my $str = '身分證
A112345678
b298765432
Z100000000
X212345678
a312345678
C0123456789
D11234567
日期
2025-02-28
2024-04-25
2023/12/01
2022 09 15
2023/02-31
2022 09 32
2025-00-01
2026/04/00
2024-13-25
電子信箱
example@example.com
user123@subdom-ai.example.co.uk
.name.surname@domain-name.com
john_doe@examples.co.uk
jane123@exampl.enet
bob-smith@example.sa.as.edu
peter1@example.org
example - 缺少 \'@\' 和域名
example@.com - 缺少域名
example@example - 缺少頂級域名(如 .com、.net、.org 等)
example@example.c - 頂級域名必須至少有兩個字元
example@exa_mple.com - 域名部分不應包含下劃線
example@example..com - 域名部分不應包含連續的點號
網址
https://www.example.com
http://example.com
www.example.com
https://subdomain.example.com
http://example.com/path/to/page
www.example.com/path/to/page?query=param
https://www.example.com/path/to/page?query=param&another=param
example - 缺少協議(如 http:// 或 https://)和/或 www.。
http://example - 缺少頂級域名(如 .com、.net、.org 等)。
http://.com - 缺少域名。
http://example-.com - 域名或子域名不能以破折號結尾。
http://-example.com - 域名或子域名不能以破折號開頭。
http://exa--mple.com - 域名或子域名不能包含連續的破折號。
';
my $regex = qr/^[A-Za-z][12]\d{8}$/mp;
if ( $str =~ /$regex/g ) {
print "Whole match is ${^MATCH} and its start/end positions can be obtained via \$-[0] and \$+[0]\n";
# print "Capture Group 1 is $1 and its start/end positions can be obtained via \$-[1] and \$+[1]\n";
# print "Capture Group 2 is $2 ... and so on\n";
}
# ${^POSTMATCH} and ${^PREMATCH} are also available with the use of '/p'
# Named capture groups can be called via $+{name}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Perl, please visit: http://perldoc.perl.org/perlre.html