Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我能';“不要使用这样的组名”;abc_def";使用模式_Java_Regex - Fatal编程技术网

Java 我能';“不要使用这样的组名”;abc_def";使用模式

Java 我能';“不要使用这样的组名”;abc_def";使用模式,java,regex,Java,Regex,我对一系列必须编译的模式有一个问题。以下是一个例子: ...(?<NOT>\bNOT\b)|(?<LEFT_PAR>\()|(?<RIGHT_PAR>\))... 我很确定下划线就是问题所在。在网上搜索时,我没有发现任何有用的东西,当我看到python中的示例运行良好时,我不明白为什么会出现这个问题。我读过,它在Java模式中被视为普通字符。显然,如果我删除它,效果会很好 你能帮我吗?:) 谢谢 编辑: 公共枚举模式(){ 不是(“\\bNOT\\b”),

我对一系列必须编译的模式有一个问题。以下是一个例子:

...(?<NOT>\bNOT\b)|(?<LEFT_PAR>\()|(?<RIGHT_PAR>\))...
我很确定下划线就是问题所在。在网上搜索时,我没有发现任何有用的东西,当我看到python中的示例运行良好时,我不明白为什么会出现这个问题。我读过,它在Java模式中被视为普通字符。显然,如果我删除它,效果会很好

你能帮我吗?:) 谢谢

编辑:

公共枚举模式(){
不是(“\\bNOT\\b”),
左杆(“\\(”),
右面值(“\\”);[…]
}
//我正在剪切枚举构造函数和toString()方法。。。
//这是使用enum的方法的一部分
StringBuilder allPatterns=新建StringBuilder();
//此循环创建一组唯一的模式(键值)
for(validTokens t:validTokens.values())
所有模式。追加(“|”(?“+t+”);
//编译所有模式并创建一个组
Pattern=Pattern.compile(allPatterns.toString().substring(1))//错误
由于项目的具体情况,我不能更改任何名称。到目前为止,该方法和枚举都运行良好。。。如果你能帮我弄清楚的话,这就毁了所有的xD。
谢谢。

您说得对,下划线是不允许的。发件人:

从:

还可以为捕获组分配一个“名称”,一个命名的捕获组 组,然后稍后通过“名称”返回引用。组名 由以下字符组成。第一个字符必须是 一封信

  • 大写字母“A”到“Z”(“\u0041”到“\u005a”)
  • 小写字母“a”到“z”(“\u0061”到“\u007a”)
  • 数字“0”到“9”(“\u0030”到“\u0039”)

下划线是禁止的。记住,不同的语言有不同的正则方言;在Python中有效的东西在Java中可能不起作用,反之亦然。

既然您确定下划线是问题所在,那么使用“LEFTPAR”/“RIGHTPAR”作为名称是否有效?如果是这样的话,那么考虑使用“LealtPar”/“RealPar”(即用例来表示单词中断)。然后继续代码。发布一个字符串示例,您希望在其上使用正则表达式,甚至可能是整个正则表达式。不幸的是,我不能使用其他名称,因为它是一个具有明确定义细节的项目:/n目前,这些名称及其相关模式由枚举控制。例如:不(“\\bNOT\\b”)、左对齐(\(“”)、左对齐右对齐(\)、右对齐-PAR@LeGent001创建一个标识符转换函数(或维护一个单独的映射)怎么样?例如@user2864740?也许我已经理解了你的想法。。。也许,这是unic的方式:/
Exception in thread "main" java.util.regex.PatternSyntaxException: 
named capturing group is missing trailing '>'
 public enum Patterns(){
   NOT("\\bNOT\\b"),
   LEFT-PAR("\\("), 
   RIGHT-PAR("\\)"); [...] 
 }
 //i'm cutting enum constructor and toString() method...

//That's the part of the method that uses enum

StringBuilder allPatterns = new StringBuilder();

//This loop creates a unique group of patterns (key-value)
for (validTokens t : validTokens.values()) 
    allPatterns.append("|(?<" + t.name() + ">" + t + ")");

//Compile all Patterns and create a group
Pattern pattern = Pattern.compile(allPatterns.toString().substring(1)); //ERROR 
  778                           if (ASCII.isLower(nextChar) ||
  779                               ASCII.isUpper(nextChar) ||
  780                               ASCII.isDigit(nextChar)) {
  781                               gsb.append(nextChar);
  782                               cursor++;