具有最大行长度和最大总字符数的正则表达式
Regex with max line length and maximum total characters
我希望有一个正则表达式,它允许以下内容:
每行都有最大长度的文本,假设为 10,并且整个文本的总字符数有最大值(假设为 30)。
例如,这将是一些 有效 输入:
1)
1234567890
2)
123456789
1234567890
3)
12
123456
12456
这将是一些无效输入:
1)
12345678901
2)
1234567890
1234567890
1234567890
(请注意,由于换行,无效示例 2 超过了 30 个字符的限制)
到目前为止我所拥有的是这个正则表达式:^([^\r\n]{0,10}(\r?\n|$)){5}$
(测试它here)
它几乎满足我的要求,除了最大输入是 5 行而不是 30 个字符。我已经在这个正则表达式上付出了很多努力,但现在我被卡住了。
我的 Regex 需要做哪些修改才能匹配总共 30 个字符?
在您的正则表达式中添加 look ahead:
^(?=[\s\S]{1,30}$)([^\r\n]{0,10}(\r?\n|$)){5}$
一个 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');
}
输出:
12
123456
12456 : OK
12345678901 : KO
你需要像 and oprator 这样的东西。 "rule1 and rule2"。根据另一个 question,这是通过使用非消耗性表达式来实现的。
(?=^([^\r\n]{0,10}(\r?\n|$)))[\s\S]{1,30}
我不确定,语法是否正确。但以它为起点。
我希望有一个正则表达式,它允许以下内容:
每行都有最大长度的文本,假设为 10,并且整个文本的总字符数有最大值(假设为 30)。
例如,这将是一些 有效 输入:
1)
1234567890
2)
123456789
1234567890
3)
12
123456
12456
这将是一些无效输入:
1)
12345678901
2)
1234567890
1234567890
1234567890
(请注意,由于换行,无效示例 2 超过了 30 个字符的限制)
到目前为止我所拥有的是这个正则表达式:^([^\r\n]{0,10}(\r?\n|$)){5}$
(测试它here)
它几乎满足我的要求,除了最大输入是 5 行而不是 30 个字符。我已经在这个正则表达式上付出了很多努力,但现在我被卡住了。
我的 Regex 需要做哪些修改才能匹配总共 30 个字符?
在您的正则表达式中添加 look ahead:
^(?=[\s\S]{1,30}$)([^\r\n]{0,10}(\r?\n|$)){5}$
一个 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');
}
输出:
12
123456
12456 : OK
12345678901 : KO
你需要像 and oprator 这样的东西。 "rule1 and rule2"。根据另一个 question,这是通过使用非消耗性表达式来实现的。
(?=^([^\r\n]{0,10}(\r?\n|$)))[\s\S]{1,30}
我不确定,语法是否正确。但以它为起点。