gpt4 book ai didi

Java 正则表达式 : Require zero/even amount of backslashes without including backslashes in the match

转载 作者:行者123 更新时间:2023-12-04 07:25:55 24 4
gpt4 key购买 nike

我需要一个正则表达式来匹配所有被 <@!或 <@ 和 >。匹配项不能跟随奇数个反斜杠,但可以跟随零个或偶数个反斜杠。
目前,我有这个正则表达式:

(?<!\\)(?:\\{2})*(<@!|<@)[0-9]+>
问题是匹配 包括 反斜杠,我需要一个正则表达式,其中 而不是 包括反斜杠。
任何人都可以制作一个可以完成此任务的正则表达式吗?
例子:
有效输入字符串: \\<@!123>匹配项: <@!123>无效的输入字符串: \\\<@!123>比赛:无
有效输入字符串: <@123>test<@456>匹配项: <@123>, <@456>无效的输入字符串: \<@123>test\\\<@456>比赛:无

最佳答案

您可以使用 (?<!\\)(?:\\\\)*(<@!?\d+>) 正则表达式捕获所需的子字符串。请参阅 regex demo
模式中的 (<@!|<@) 部分与 <@!<@ 匹配,区别仅在于 ! 字符。因此,用一个简单的 <@!? 模式匹配 <@ 和一个可选的 ! 字符来替换它是合乎逻辑的。然后,捕获整个 (<@!?\d+> 部分,并与 Java 代码一起获取。
查看 Java demo :

import java.util.*;
import java.util.stream.*;
import java.util.regex.*;

class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
String s = "1) \\\\<@!1123> 2) \\\\\\<@!2123> 3) <@3123>test<@3456> 4) \\<@4123>test\\\\\\<@4456>";
Pattern pattern = Pattern.compile("(?<!\\\\)(?:\\\\\\\\)*(<@!?\\d+>)");
for (String t: pattern.matcher(s).results().flatMap(g -> Stream.of(g.group(1))).toArray(String[]::new)) {
System.out.println(t);
}
}
}
输出:
<@!1123>
<@3123>
<@3456>

关于Java 正则表达式 : Require zero/even amount of backslashes without including backslashes in the match,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68215436/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com