Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.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_Android_Regex_Java 8 - Fatal编程技术网

在Java中查找特定开始/结束字符串之间的所有匹配子字符串

在Java中查找特定开始/结束字符串之间的所有匹配子字符串,java,android,regex,java-8,Java,Android,Regex,Java 8,以下是我需要做的: 我有一个很长的字符串 com.example.TEXT A TO BE EXTRACTED at com.example.TEXT B to be extracted at org.xample.SOME OTHER TEXT at... 我想去 要提取的文本A 要提取的文本B 但不是其他一些文本 我不太擅长正则表达式,Java也不太擅长正则表达式。在JavaScript中,我可以得到第一个匹配项 var re = /com\.example\.(.*) at/; s

以下是我需要做的:

我有一个很长的字符串

com.example.TEXT A TO BE EXTRACTED at com.example.TEXT B to be extracted at org.xample.SOME OTHER TEXT at...
我想去

  • 要提取的文本A
  • 要提取的文本B
但不是
其他一些文本

我不太擅长正则表达式,Java也不太擅长正则表达式。在JavaScript中,我可以得到第一个匹配项

var re = /com\.example\.(.*) at/;
s = 'com.example.abcde at';
var m = s.match(re);
这将在m[1]中产生Δbcde
`

我怎么能

  • 用Java做同样的事情

  • 获得所有匹配项

这里的上下文是一个Android应用程序。我遇到过对ApacheStringUtils类及其
stringbetween
方法的引用。除了我找不到相关的JAR文件之外,我真的很想避免仅仅为了这个需要而在我的应用程序中增加一个JAR


我应该提到的是,我使用的是Java 8,不需要以Android 4.4.2以下的版本为目标。

正则表达式不能重复捕获组并一次捕获该组的所有匹配项。包含Java的正则表达式引擎将允许任意重复捕获组,但只捕获该组的最后一个匹配项。通过使用循环,您可以从字符串中查找和捕获多个匹配组


您可以在Java中使用这个正则表达式:惰性点匹配将回答您的第二个问题。这里回答了第一个问题:。您的标题似乎与您的问题不匹配--这是关于获取一系列值还是匹配一个模式?嗯。我想不出一个更好的标题,但我会试试看。我想做的就是给我一个类似于
开始匹配此1结束开始匹配此2结束ALTSTART不匹配此1结束开始匹配此3结束…
我想以
[匹配此1,匹配此2,匹配此3]
结束我下一步需要做的事情。@anubhava谢谢你。我只是模模糊糊地意识到懒惰的匹配,但我的印象是,这将是贪婪的,做一个超越?你能详细谈谈你的评论吗?
Pattern pattern = 
Pattern.compile(console.readLine("%nEnter your regex: "));

Matcher matcher = 
pattern.matcher(console.readLine("Enter input string to search: "));

boolean found = false;
while (matcher.find()) {
     console.format("I found the text" +
                " \"%s\" starting at " +
                "index %d and ending at index %d.%n",
                matcher.group(),
                matcher.start(),
                matcher.end());
     found = true;
}
if(!found){
     console.format("No match found.%n");
}