我正试着把一根绳子 \n
只有当它不在我的“动作块”中时。
下面是一个文本示例 message\n [testing](hover: actions!\nnew line!) more\nmessage
我想分开当 \n
不在房间里 [](this \n should be ignored)
,我为它做了一个正则表达式,你可以在这里看到https://regex101.com/r/rpaq2h/1/ 在这个例子中,它似乎工作正常,所以我接着用java实现了:
final List<String> lines = new ArrayList<>();
final Matcher matcher = NEW_LINE_ACTION.matcher(message);
String rest = message;
int start = 0;
while (matcher.find()) {
if (matcher.group("action") != null) continue;
final String before = message.substring(start, matcher.start());
if (!before.isEmpty()) lines.add(before.trim());
start = matcher.end();
rest = message.substring(start);
}
if (!rest.isEmpty()) lines.add(rest.trim());
return lines;
这应该忽略任何 \n
如果它们在上面显示的模式中,那么它就永远不会匹配“action”组,就像它被添加到java和 \n
是现在,它永远不会匹配它。我有点搞不懂为什么,因为它在regex101上运行得很好。
1条答案
按热度按时间7vux5j2d1#
而不是检查组是否
action
,您可以简单地使用regex替换组$1
(第一个捕获组)。我还把你的正则表达式改成了
(?<action>\[[^\]]*]\([^)]*\))|(?<break>\\n)
作为[^\]]*
不会倒退(.*?
回溯并导致更多步骤)。我也对她做了同样的事[^)]*
.看到这里的代码了吗