我需要一个允许使用字母数字,破折号,下划线+空格的正则表达式。
但是,我需要不匹配所有空格的输入。研究,这听起来像一个负面的前瞻的情况?
我的第一次尝试如下:
public static void main(String[] args) {
String conservedString = "ABC";
int n = 5;
if (conservedString.length() > n) {
throw new RuntimeException("Invalid length of the conserved string: " + conservedString.length());
}
String initialString = conservedString + Stream.iterate("X", x -> "X").limit(n - conservedString.length()).reduce("", (a,b) -> a+b);
List<String> result = permutation(initialString)
.stream()
.filter(x -> {
for (int i=0; i<conservedString.length()-1; i++) {
if (x.indexOf(conservedString.charAt(i)) > x.indexOf(conservedString.charAt(i+1))) {
return false;
}
}
return true;
})
.peek(System.out::println)
.collect(Collectors.toList());
}
但这似乎并没有成功。有什么建议吗?
答案 0 :(得分:1)
不是负面的预测,而是对非空间的正面预测。
/^(?=.*\S)[- \w]+$/
答案 1 :(得分:0)
我不认为你可以使用正则表达式来确保整个字符串不是空格...我会在值上运行varString.trim()。
这样做,你的regEx变得非常简单......
[\w\d\-_ ]+
如果修剪了该值,那么+ 1或更高的要求将对您确保整个字符串不是空格有效。此外,破折号是一个用于范围的特殊字符,所以我认为它需要被转义
\ w适用于任何字母字符,\ s适用于任何空格(请记住,如果修剪一个只有空格的字符串变为空字符串并且不匹配),\ d匹配任何数字
编辑:用空格字符代替\ s,因为我不认为你想换行或标签?