匹配每行字符数和行数的正则表达式

3
我想确保一个字符串包含0到3行,并且对于存在的给定行,它包含0到100个字符。它需要是JavaScript和Java的有效表达式。像许多使用RegEx的人一样,我从互联网上的各个地方复制内容。
从后往前看,我认为^.{0,100}$可以让我“行包含0到100个字符”,但尝试将其分组为(^.{0,100}$){0,3}不起作用。
换行符可能是我的问题的一部分,因此我最终得到了像.{0,100}(?:\n.{0,100}){0,2}这样的东西来表示“0到100个字符的行,后面跟着0到2次换行符和0到100个字符”,但那也失败了。
直到现在,我都是从其他人那里得到这些表达式的。使用在线测试工具,我终于将其拼凑在一起:^.{0,100}(?:(?:\r\n|[\r\n]).{0,100}){0,2}$,看起来它可以工作。
所以,我的问题是,在^.{0,100}(?:(?:\r\n|[\r\n]).{0,100}){0,2}$中,我是否遗漏了任何陷阱?此外,即使它可以工作,它是使用的最佳表达式吗?
2个回答

4

我认为你现有的内容已经很好了。如果你想要更紧凑的换行部分,可以进行一些调整。如果你使用matches()函数,则不需要^$

String regex = ".{0,100}(?:[\r\n]+.{0,100}){0,2}";

编辑

经过一些思考,我意识到上面的换行建议将匹配4(或更多)行,只要其中几行为空。所以,我们回到了你提出的例子。嗯,至少开始和结束字符可以省略。

String regex = ".{0,100}(?:(?:\r\n|[\r\n]).{0,100}){0,2}";

我同意你的观点,可以删除它们,但我的警告是我只能配置一个字符串。我使用的SDK将使用相同的模式在两个地方生成JS和Java代码。我很确定当我删除锚点时,它开始在JS端失败了。 - Matt Felzani

1
我不太擅长正则表达式,但这个可以吗?
^.{0,100}\n?(.{0,100}\n)?.{0,100}?$

我还不太熟悉正则表达式,如果有错误(很可能会有),请告诉我。


我认为如果存在字符,就需要有一个换行符。这意味着\n似乎是可选字符串的一部分,而不是可选的字符串的一部分。因此,如果没有换行符的单行将错误地失败匹配。 - Matt Felzani
此外,我认为\n在JS中可以工作,但在Java中不行。至少在我添加了\r支持之前,我遇到了Java问题。感谢您的耐心跟进,我非常感激您的努力! - Matt Felzani
1
修复了。啊,我正在 fiddle 中进行操作。 - Spencer Wieczorek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接