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

时间:2015-05-19 08:53:05

标签: regex line maxlength

我希望拥有一个正则表达式,这将允许以下内容:

每行的最大长度为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个字符。我已经在这个正则表达式上付出了很多努力,但现在我被卡住了。

我的正则表达式需要进行哪些修改才能匹配30个字符?

2 个答案:

答案 0 :(得分:4)

在正则表达式中添加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

答案 1 :(得分:2)

你需要像和鸦片一样的东西。 “rule1和rule2”。根据另一个question,这是通过使用非消费表达式来实现的。

--------------------
| ID | Name        |
--------------------
| 1  | Kitchen     |
--------------------
| 2  | Bedroom1    |
--------------------

我不确定,语法是否正确。但请以此为出发点。