找到具有完全(或至少)一个换行符的n个字符

sam*_*jaf 3 java regex regex-group regex-lookarounds

我在设计正则表达式时遇到问题.我甚至不确定它是否有可能.

我想匹配n个字符,但其中一个必须是换行符(或任何已定义的字符).

这是我的意见:

0000000
0000000
000A000
00AB000
AAAB000
ABBB000
Run Code Online (Sandbox Code Playgroud)

我的(不工作)正则表达式是

.*A.{5}A.{5}A.{5}A.*
Run Code Online (Sandbox Code Playgroud)

更改模式DOTALL是不够的,因为我必须确保每个匹配之间有一个换行符A

我只是想知道我的输入是否匹配,我不想提取任何东西.

我想检查A输入中是否有-diagonal.

Uni*_*ron 5

自引用组(Qtax Trick)

/^(?:.(?=.*+\n(\1?+.).*+\n(\2?+.).*+\n(\3?+.)))*?...A.*+\n\1?+..A.*+\n\2?+.A.*+\n\3?+A/m
Run Code Online (Sandbox Code Playgroud)

说明:

  • ^ 开始一行.
  • (?:. 匹配除换行符之外的任何字符.
  •     (?=积极前瞻:断言可以匹配以下内容.这部分是为了捕捉.
  •       .*+\n 匹配所有内容,然后是换行符本身.
  •             (\1?+.)
    •   ?+:如果此组已匹配,请使用并向组中添加一个字符,否则只需匹配一个字符,然后前进.
  •       .*+\n 匹配下一行的所有内容,与上述相同.
  •             (\2?+.) 与子模式1相同.
  •       .*+\n 提升线.
  •             (\3?+.) 与子模式1和2相同.
  •     ) 完成前瞻.
  • )*?零或更多,不情愿地匹配.

上述小组执行以下操作.注意彩色组:

pic http://gyazo.com/f45e1ddb77012c5d4933f2b139ffc29d.png

然而,因为这个群体被不情愿地量化,所以会发生这种情况:

pic http://gyazo.com/ea5a724631538408db6099d9a286da62.png

请注意,虽然可以捕获或不捕获彩色组,但在捕获期间指针位置保持不变.因此,在第一次迭代时,所有捕获组都不会捕获任何内容.因此,我们进入正则表达式的下一部分:

  • ...A三个字符,然后是"A"(字面字符).
  •     .*+\n 跳过剩下的行,换行符......
  • \1?+ 如果我们抓住第一组,消耗它!
  •   ..A两个字符,然后是"A"(文字字符).
  •     .*+\n 下一行.
  • \2?+ 尽可能消费.
  •   .A你明白了,但无论如何我都会写文字.和楼上一样.
  •     .*+\n 预先.
  • \3?+ ......
  • A 比赛结束!

如果你不喜欢文字,我会再画一次:

pic http://gyazo.com/e84f76d78243c89c9acadbdefbf262bb.png

让我们向我们的主人低头 -

ASCII"图像"中的"垂直"正则表达式匹配

这是一个代码演示,这是一个e xeded版本的正则表达式演示.

  • 我给你拍了一张照片.@ Jonny5 :) (3认同)