以下是我需要做的事情:
我有一个带有
形式的冗长字符串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以外的任何目标。
答案 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");
}