我查看了各种Java REGEX信息,但找不到我想要的答案:
如何查找两个值(abc
和def
)之间的所有字符串?
所以,如果我有以下字符串:
abc
acc
ace
amf
def
efg
khp
mlo
我希望得到以下内容,因为它们介于abc
和def
之间(包括):
abc
acc
ace
amf
def
答案 0 :(得分:9)
没有直接表达方式。事实上,确定给定数字是否在特定范围内几乎完全相同。 (即,提供匹配123-456范围内的数字的正则表达式。)
您可以使用相当复杂的正则表达式对其进行“编码”。我在这里描述的一个过程:
对于"abc"
到"def"
的具体示例,您可以这样写:
a
紧随其后
b
后跟c-z
或c-z
后跟任何字符,或b-c
后跟任意两个字符,或d
后跟
a-d
后跟任何字符,或e
后跟
a-f
。这是代码:
String pattern = "a(b[c-z]|[c-z][a-z])|[bc][a-z][a-z]|d([a-d][a-z]|e[a-f])";
for (String s: "abc acc ace amf def efg khp mlo".split(" "))
System.out.println(s + (s.matches(pattern) ? " matches" : ""));
输出:
abc matches
acc matches
ace matches
amf matches
def matches
efg
khp
mlo
String.compareTo
(推荐)您应该考虑比较字符串:
"abc".compareTo(s) <= 0 && s.compareTo("def") <= 0
示例:强>
String lower = "abc", upper = "def";
for (String s: "abc acc ace amf def efg khp mlo".split(" ")) {
boolean match = lower.compareTo(s) <= 0 && s.compareTo(upper) <= 0;
System.out.println(s + (match ? " matches" : ""));
}
<强>输出:强>
abc matches
acc matches
ace matches
amf matches
def matches
efg
khp
mlo
答案 1 :(得分:2)
public static boolean between(
final String candidate, final String left, final String right) {
return left.compareTo(candidate) <= 0 && candidate.compareTo(right) <= 0;
}
测试代码:
public static void main(final String[] args) throws Exception {
final String[] words = "abc acc ace amf def efg khp mlo".split("\\W+");
final String left = "abc";
final String right = "def";
for (final String word : words) {
System.out.println(MessageFormat.format("{0}{1}between {2} and {3}",
word, (between(word, left, right) ? " is " : " is not "), left, right));
}
}
<强>输出:强>
abc介于abc和def之间 acc介于abc和def之间 ace在abc和def之间 amf介于abc和def之间 def在abc和def之间 efg不在abc和def之间 khp不在abc和def之间 mlo不在abc和def之间