所以我试图从字符串中获取十六进制颜色。经过一番研究和尝试,我找到了这段代码。
这里的代码是:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Find out if a String contains a very simple pattern.
*/
public class PatternMatcherFind {
private static final String HEX_PATTERN = "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$";
public static void main(String[] args) {
String stringToSearch = "we have got white #ffffff and black #000000 wohooo!";
Pattern p = Pattern.compile(HEX_PATTERN); // the pattern to search for
Matcher m = p.matcher(stringToSearch);
// now try to find at least one match
if (m.find())
System.out.println("Found a match");
else
System.out.println("Did not find a match");
}
}
使用它总是说除了我们有两个之外没有其他比赛。如果字符串只是“ #hex”,没有其他字符,那就没问题了。
所以我想要完成的是 获取它以检测该字符串中是否存在十六进制并获取其后的文本
示例: 此字符串“我们有白色#ffffff和黑色#000000 wohooo!” 应该给我们
我知道我们可以通过 while(matcher.find()){然后打印group(0)和group(1),但我的正则表达式现在似乎无法正常工作。
答案 0 :(得分:1)
由于边界匹配(^
-行的开头,$
-行的结尾),您的模式在句子的中间找不到任何十六进制。这就是为什么它仅匹配#hex
个相似的字符串的原因。
您可以摆脱它们,以便在句子中找到颜色:
private static final String HEX_PATTERN = "#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})"
... 但是但我不相信您应该如何进行操作以满足您的要求。
相反,您可以考虑以下内容:
import java.util.Arrays;
import java.util.regex.Pattern;
public class PatternMatcherFind {
// ^ - String starts with
// [A-Fa-f0-9]{6} - 6 chars long color literal
// | - or
// [A-Fa-f0-9]{3} - 3 chars long color literal
private static final String STARTS_WITH_COLOR_LITERAL = "^[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}";
private static final Pattern pattern = Pattern.compile(STARTS_WITH_COLOR_LITERAL);
public static void main(String[] args) {
String stringToSearch = "we have got white #ffffff and black #000000 wohooo!";
Arrays.stream(stringToSearch.split("#")) // splitting on "#" will create array [ "we have got white ", "ffffff and black ", "000000 wohooo!" ]
.skip(1) // we may omit first one as it would never start with color literal
.filter(part -> pattern.matcher(part).find()) // we keep only those Strings which starts with color literal
.forEach(System.out::println); // may print them or whatever
}
}
对于上面的代码,输出符合预期:
ffffff和黑色
000000 wohooo!
答案 1 :(得分:0)
特殊字符“ ^”仅匹配字符串的开头。特殊字符“ $”仅匹配字符串的结尾。
如果要在字符串中间找到模式的其余部分,请不要在模式中使用特殊字符“ ^”和“ $”。