有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

很难找到与JavaScript正则表达式等价的Java正则表达式

所以,我想做的是:

我有一个字符串:

Special Skills:
someText
could range 
through multiple lines

Special Abilities:
another
someText

Background:
multiline
text

我已经想出了下面的正则表达式。根据regexr,它在JavaScript中工作得非常好。com,但根据Intellij的内置Check Regex和freeformatter,不是用Java。com

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

首先,表达式应该提取

Special Skills:
someText
could range 
through multiple lines

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

由于我被困在这里,任何帮助都将不胜感激


共 (1) 个答案

  1. # 1 楼答案

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

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

    this regex demo

    细节

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

    另一种说法是:

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

    this regex demo

    这里,(?ms)定义了多行和点所有模式(^将匹配此处一行的开头,.将匹配所有符号)。我们需要使用\Z-end-of-string锚点,而不是$