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.
/^(?:.(?=.*+\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
让我们向我们的主人低头 -
这是一个代码演示,这是一个e xeded版本的正则表达式演示.