【发布时间】:2017-03-10 15:09:07
【问题描述】:
这是我需要做的:
我有一个很长的字符串,格式为
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 EXTRACTEDTEXT B TO BE EXTRACTED- ...
但不是SOME OTHER TEXT
我不太擅长正则表达式,在 Java 中一点也不擅长。在 JavaScript 中,我可以将第一个匹配项设为
var re = /com\.example\.(.*) at/;
s = 'com.example.abcde at';
var m = s.match(re);
这将产生 àbcdeinm[1]`
我该怎么做
在 Java 中做同样的事情
获取所有匹配项
这里的上下文是一个 Android 应用。我遇到了对 Apache StringUtils 类及其stringbetween 方法的引用。除了我无法找到相关的 JAR 文件这一事实之外,我真的很想避免仅仅为了这个需要而在我的应用程序中添加一个更多的 JAR。
我应该提到我正在使用 Java 8,并且不需要针对低于 Android 4.4.2 的任何东西。
【问题讨论】:
-
你可以在 Java 中使用这个正则表达式:
com\.example\.(.*?) at -
惰性点匹配将回答您的第二个问题。第一个在这里回答:Java Regex Capturing Groups.
-
您的标题似乎与您的问题不匹配——这是关于获取值范围还是匹配模式?
-
嗯......我想不出更好的标题,但我会尝试一下。我想要做的只是给一个类似于
START match this1 END START match this2 END ALTSTART don't match this1 END START match this3 END...的字符串,我想以[match this1,match this2, match this3]结尾来处理我接下来需要做的事情。 -
@anubhava 谢谢。我只是模糊地意识到惰性匹配,但我的印象是它会贪婪并做一个过度匹配?您能否详细说明您的评论?