正则表达式,具有最大行长和最大总字符数

mof*_*tje 2 regex line maxlength

我很想拥有一个正则表达式,它可以允许以下操作:

每行的最大长度为10的文本,而总字符数最多为30(假设为30)。

例如,这将是一些有效的输入:

1)

1234567890
Run Code Online (Sandbox Code Playgroud)

2)

123456789

1234567890
Run Code Online (Sandbox Code Playgroud)

3)

12
123456

12456
Run Code Online (Sandbox Code Playgroud)

这将是一些无效的输入:

1)

12345678901
Run Code Online (Sandbox Code Playgroud)

2)

1234567890

1234567890
1234567890
Run Code Online (Sandbox Code Playgroud)

(请注意,由于换行,无效的示例2超过了30个字符的限制)

到目前为止,我所拥有的是这个Regex:(在这里进行^([^\r\n]{0,10}(\r?\n|$)){5}$测试) 它几乎可以满足我的要求,但是最大输入是5行而不是30个字符。我已经在这个正则表达式上付出了很多努力,但是现在我陷入了困境。

我的Regex总共需要匹配30个字符,需要进行哪些修改?

Tot*_*oto 5

添加先行在您的正则表达式:

^(?=[\s\S]{1,30}$)([^\r\n]{0,10}(\r?\n|$)){5}$
Run Code Online (Sandbox Code Playgroud)

一个Perl脚本:

my $re = qr~^(?=[\s\S]{1,30}$)([^\r\n]{0,10}(\r?\n|$)){5}$~;
my @data = (
'12
123456

12456',
'12345678901');
for my $str(@data) {
    say $str, ' : ',($str =~ $re ? 'OK' : 'KO');
}
Run Code Online (Sandbox Code Playgroud)

输出:

12
123456

12456 : OK
12345678901 : KO
Run Code Online (Sandbox Code Playgroud)