在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");
}