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

时间:2017-03-10 15:09:07

标签: 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...

我想得到

  • TEXT A TO BE EXTRACTED
  • TEXT B TO BE EXTRACTED
  • ...

但不是SOME OTHER TEXT

我不是非常擅长正则表达式而在Java中根本不是这样。在JavaScript中,我可以将第一个匹配作为

var re = /com\.example\.(.*) at/;
s = 'com.example.abcde at';
var m = s.match(re);

会产生àbcdein m [1]`

我怎么能

  • 在Java中执行等效的

  • 获取所有比赛

此处的上下文是Android应用。我遇到了对Apache StringUtils类及其stringbetween方法的引用。除了我无法找到相关的JAR文件这一事实之外,我真的想避免为了这个需要而再用一个JAR来扩充我的应用程序。

我应该提一下,我使用的是Java 8,并且不需要针对Android 4.4.2以外的任何目标。

1 个答案:

答案 0 :(得分:0)

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

Here is an example of such a loop taken from Oracle documentation:

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");
}
相关问题