查找与JavaScript正则表达式等效的Java正则表达式的困难

克林格特先生:

所以,我想做的是:

我有一个字符串:

Special Skills:
someText
could range 
through multiple lines

Special Abilities:
another
someText

Background:
multiline
text

我已经设法提出以下正则表达式。根据regexr.com,它可以完美地在JavaScript中工作,而根据Intellij内置的Check-Regex和freeformatter.com,它不能在Java中完美地工作。

Special Abilities:\n(.*\n)+?(Special Skills:|Background:)

表达式首先应提取

Special Skills:
someText
could range 
through multiple lines

请注意,“特殊能力”和“背景”两个部分都是可选的。

由于我一直处于困境,因此不胜感激!

威克多·史翠比维(WiktorStribiżew):

您可以在模式的末尾添加字符串结尾(行)$作为替代组的替代,确保.匹配回车带有(?d) Pattern.UNIX_LINES嵌入式标志,并(.*\n)+?使用捕获组包装以将匹配的所有文本捕获为1组(并且(.*\n)+?可以更改为非捕获组):

(?d)Special Abilities:\r?\n((?:.*\n)*?)(Special Skills:|Background:|$)

请参阅此正则表达式演示

细节

  • (?d)- .现在匹配除换行符以外的任何字符
  • Special Abilities: -文字
  • \r?\n -CRLF或LF行尾
  • ((?:.*\n)*?) -第1组:零个或多个,但尽可能少,重复0+个字符,除了LF符号,然后是LF符号
  • (Special Skills:|Background:|$)-三种选择之一:Special Skills:Background:或字符串($)的结尾

替代表达:

(?ms)Special Abilities:\r?\n(.*?)(^Special Skills:|^Background:|\Z)

观看此正则表达式演示

在这里,(?ms)定义多行和点模式(^将在此处.匹配行的开始,并将匹配所有符号)。代替$,我们需要使用\Z-字符串锚的结尾。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章