Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.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

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中不起作用_Java_Regex_Regex Group_Regex Greedy - Fatal编程技术网

带有捕获组的正则表达式在Java中不起作用

带有捕获组的正则表达式在Java中不起作用,java,regex,regex-group,regex-greedy,Java,Regex,Regex Group,Regex Greedy,我的字符串具有如下模式: PSHELF-2[PSHELF-MF-6RU] 货架-5[货架-M6] 货架-6[货架-M15] 货架-6[货架-M15] 我想突出显示信息。 为此,我使用以下正则表达式: (.*SHELF)-(.*)\[.*SHELF-(.*)\] 我试了一下 如果我尝试在Java上实现相同的登录 Pattern Pattern=Pattern.compile.*SHELF-.\\\[.*SHELF-.\\\]; Matcher Matcher=pattern.matcherinp

我的字符串具有如下模式:

PSHELF-2[PSHELF-MF-6RU] 货架-5[货架-M6] 货架-6[货架-M15] 货架-6[货架-M15] 我想突出显示信息。 为此,我使用以下正则表达式:

(.*SHELF)-(.*)\[.*SHELF-(.*)\]
我试了一下

如果我尝试在Java上实现相同的登录

Pattern Pattern=Pattern.compile.*SHELF-.\\\[.*SHELF-.\\\]; Matcher Matcher=pattern.matcherinputString; 字符串group1=matcher.group1; 字符串group2=matcher.group2; 字符串group3=matcher.group3; 我得到了以下错误:

java.lang.IllegalStateException:未找到匹配项 这是为什么?

回答了您最初的问题

创建捕获组并以多种形式返回所需的输出:

(([A-Z]+)-([0-9]+))\[([A-Z]+)-([A-Z0-9-]+)(\])
如果您愿意,还可以进一步简化它

Java测试 JavaScript演示 常量正则表达式=/[A-Z]+-[0-9]+\[[A-Z]+-[A-Z0-9-]+\]/gm; const str=`PSHELF-2[PSHELF-MF-6RU] 货架-5[货架-M6] 货架-6[货架-M15] SHELF-6[SHELF-M15]`; const subst=`\n组1:$1\n组2:$2\n组3:$3\n组4:$4\n组5:$5`; //被替换的值将包含在结果变量中 const result=str.replaceregex,subst;
console.log'Substitution result:',result;您需要首先调用matcher.find,如果它返回true,则组将被初始化并可访问。从groupint上的JavaDoc:如果尚未尝试匹配…-查找时:如果匹配成功,则可以通过start、end和group方法获取更多信息..或者如果matcher.matches{matcher.group1;}可能类似于[A-Z]+-\d+\[\1-[A-Z\d]+?:-[A-Z\d]+?],并使用捕获组1和2,这不是OPs IllegalStateException的原因。OP已经有一个有效的正则表达式。将正则表达式与OPs代码一起使用也会导致IllegalStateException。
import java.util.regex.Matcher;
import java.util.regex.Pattern;

final String regex = "(([A-Z]+)-([0-9]+))\\[([A-Z]+)-([A-Z0-9-]+)(\\])";
final String string = "PSHELF-2[PSHELF-MF-6RU]\n"
     + "SHELF-5[SHELF-M6]\n"
     + "SHELF-6[SHELF-M15]\n"
     + "SHELF-6[SHELF-M15]";
final String subst = "\\1 \\4";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);

// The substituted value will be contained in the result variable
final String result = matcher.replaceAll(subst);

System.out.println("Substitution result: " + result);