Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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 - Fatal编程技术网

Java 使用正则表达式匹配第二个子字符串

Java 使用正则表达式匹配第二个子字符串,java,regex,Java,Regex,我需要一个正则表达式,它匹配abcasdabchjkabc中的第二个abc。 我试图写这样的代码 Pattern p = Pattern.compile("(?<=abc(.*?))abc"); 请给我看正确的 不能在look-behind断言中使用*或+ 你真的想匹配两个ABC之间的所有内容吗 或者你只是想检查一下是否有两个ABC 我认为在这两种情况下都不需要lookbehind。在lookbehind断言中不能使用*或+ 你真的想匹配两个ABC之间的所有内容吗 或者你只是想检查一下是

我需要一个正则表达式,它匹配abcasdabchjkabc中的第二个abc。 我试图写这样的代码

Pattern p = Pattern.compile("(?<=abc(.*?))abc");
请给我看正确的

不能在look-behind断言中使用*或+

你真的想匹配两个ABC之间的所有内容吗

或者你只是想检查一下是否有两个ABC

我认为在这两种情况下都不需要lookbehind。

在lookbehind断言中不能使用*或+

你真的想匹配两个ABC之间的所有内容吗

或者你只是想检查一下是否有两个ABC


我认为在这两种情况下都不需要回头看。

我想你想要的是:

java.util.regex.Pattern.compile("(?<=abc.{1,99})abc");

它会找到第二个abc。

我想你想要的是:

java.util.regex.Pattern.compile("(?<=abc.{1,99})abc");

它会找到第二个abc。

一个简单的选择是两次匹配您的模式:


工作示例:

一个简单的选项是两次匹配您的模式:


工作示例:

我知道匹配整个字符串的方法,当我需要替换字符串时就足够了。我只是试着只匹配第二个abc,看看正则表达式是否能做到这一点。我知道匹配整个字符串的方法,当我需要替换字符串时,这就足够了。我只是尝试只匹配第二个abc,看看正则表达式是否可以做到这一点。是的!就是我要找的那个!考虑这个字符串:ababcDEF,也许?如果这是你想要的0,将工作。主要的一点是,在查找时必须使用大括号语法。这是一个非常糟糕的解决方案,您假设查找中的abc与要匹配的abc之间的距离最多为99个字符。是的!就是我要找的那个!考虑这个字符串:ababcDEF,也许?如果这是你想要的0,将工作。主要的一点是,在查找时必须使用大括号语法。这是一个非常糟糕的解决方案,您假设查找中的abc与要匹配的abc之间的距离最多为99个字符。这也是一个很好的方法。谢谢你告诉我start和end的用法。如果没有匹配项,只需捕获java.lang.IllegalStateException。这也是一种很好的方法。谢谢你告诉我start和end的用法。如果没有匹配项,只需捕获java.lang.IllegalStateException。
Pattern.compile("abc.*?abc");
java.util.regex.Pattern.compile("(?<=abc.{1,99})abc");
String input = "abcXYabcZRabc";

Pattern p = Pattern.compile("abc");
Matcher m = p.matcher(input);

m.find(); // what to do when there is no match?
m.find(); // what to do when there is only one match?

System.out.println("Second match is between " + m.start() + " and " + m.end());