很难找到与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 楼答案
您可以在模式末尾添加字符串(行)结束锚}嵌入标志的回车符,并用捕获组包装
$
作为替换组的替代,确保.
匹配带有(?d)
{(.*\n)+?
,以将其匹配的所有文本捕获到一个组中(并且(.*\n)+?
可以更改为非捕获组):见this regex demo
细节
(?d)
-.
现在匹配除换行符以外的任何字符Special Abilities:
-文字文本\r?\n
-一个CRLF或LF行结束((?:.*\n)*?)
-第1组:0或更多,但尽可能少,重复0+字符,而不是LF符号,然后是LF符号(Special Skills:|Background:|$)
-三种选择之一:Special Skills:
、Background:
或字符串结尾($
)李>另一种说法是:
见this regex demo
这里,
(?ms)
定义了多行和点所有模式(^
将匹配此处一行的开头,.
将匹配所有符号)。我们需要使用\Z
-end-of-string锚点,而不是$