当前位置: 首页 > 知识库问答 >
问题:

Java regex:要求零/偶数的反斜杠,而不在匹配中包含反斜杠

鱼志学
2023-03-14

我需要一个正则表达式,匹配所有被<@包围的数字!或<@和>。匹配项不能跟在奇数个反斜杠后面,但可以跟在零或偶数个反斜杠后面。

目前,我有以下regex:

(?<!\\)(?:\\{2})*(<@!|<@)[0-9]+>

问题是匹配包括反斜杠,我需要一个不包括反斜杠的正则表达式。

有人能做一个能完成这一点的正则表达式吗?

有效输入字符串:<@123>测试<@456>
匹配:<@123>,<@456>

无效的输入字符串:\<@123>test\\\<@456>
匹配:无

共有1个答案

娄利
2023-03-14

可以使用(?<!\\)(?:\\\\)*(<@!?\d+>)regex捕获所需的子字符串。请参见regex演示。

模式中的(<@!<@)部分与<@!<@匹配,差异仅在字符中。因此,将其替换为与<@匹配的简单<@!?模式和可选的字符是合乎逻辑的。然后,捕获整个(<@!?\d+>部分,并用Java代码获取它。

请参见Java演示:

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>
 类似资料:
  • 问题内容: 这是一个“到底发生了什么”的问题。我实际上不需要解决方案。 我必须用双反斜杠替换字符串中的所有单反斜杠。这就是我最终要做的… …其中strRootDirectory是上面的java.lang.String。 现在,我了解了第一个参数的四个反斜杠:regex期望两个反斜杠以表示单个文字反斜杠,而Java希望它们加倍。没关系。 但是,第二个参数的八个反斜杠到底是怎么回事?替换字符串不是应该

  • Markdown 可以利用反斜杠来插入一些在语法中有其它意义的符号,例如:如果你想要用星号加在文字旁边的方式来做出强调效果(但不用 <em> 标签),你可以在星号的前面加上反斜杠: \*literal asterisks\* Markdown 支持以下这些符号前面加上反斜杠来帮助插入普通的符号: \ 反斜线 ` 反引号 * 星号 _ 底线 {} 花括号 [] 方括号 () 括

  • 本文向大家介绍Python中的左斜杠、右斜杠(正斜杠和反斜杠),包括了Python中的左斜杠、右斜杠(正斜杠和反斜杠)的使用技巧和注意事项,需要的朋友参考一下 首先,"/"左倾斜是正斜杠,"\"右倾斜是反斜杠,可以记为:除号是正斜杠一般来说对于目录分隔符,Unix和Web用正斜杠/,Windows用反斜杠,但是现在Windows (一)目录中的斜杠们 python读文件需要输入的目录参数,列出以下

  • 问题内容: 我有一个字符串“ \\ u003c”,它属于UTF-8字符集。由于存在双反斜杠,因此我无法将其解码为unicode。如何从“ \\ u003c”获取“ \ u003c”?我正在使用Java。 我尝试过 但无法实现我想要的。 这是我的代码 文件的内容是 \ u003c 问题答案: 不知道您是否仍在寻找解决问题的方法(因为您已经接受了答案),但是我仍然会添加我的答案作为针对 所述问题 的可

  • 问题内容: 我正在尝试将转换为,但是我不断遇到各种错误。我认为这是解决方案: 但这给出了以下异常: 问题答案: 将该参数解释为正则表达式。该是转义字符都 和。你需要对正则表达式进行两次转义: 但是你不必为此使用正则表达式,仅是因为你希望逐个字符地进行精确替换,并且这里不需要模式。因此就足够了: 更新:根据注释,你似乎想在JavaScript上下文中使用字符串。你最好使用它来覆盖更多字符。

  • null Groovy:找不到四位十六进制字符代码