Java can';似乎没有让Reegex匹配
所以我试着从字符串中获取十六进制颜色。经过一些研究和尝试,我找到了这段代码 代码如下:Java can';似乎没有让Reegex匹配,java,Java,所以我试着从字符串中获取十六进制颜色。经过一些研究和尝试,我找到了这段代码 代码如下: 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_PATTER
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和黑色的#000000wohoo!”
应该给我们
ffffff和黑色
000000哇哦!
我知道我们可以通过
while(matcher.find()){然后打印组(0)和组(1),但我的正则表达式现在似乎不起作用。特殊字符“^”只匹配字符串的开头。特殊字符“$”只匹配字符串的结尾
如果你想在字符串中间找到模式的其余部分,不要在模式中使用特殊字符“^”和“$”。
因为边界匹配器(<代码> ^ /代码> -行的开始,<代码> $> /代码>行的结尾),在句型中找不到任何十六进制。.这就是为什么它只匹配类似的字符串 你可以去掉它们,以便在句子中找到颜色: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哇哦
试试这个,如果它有效的话,我会发布一个答案,这样你就可以接受了。
(#[A-Fa-f0-9]{6}}{124;#[A-Fa-f0-9]{3})(.*)(#[A-Fa-f0-9]{6}{124;[A-Fa-f0-9]{3})
@shadoe20202它确实找到了一个匹配,那就是有趣的system.out.println(m.group(0.group+“+m.group+”+“+m.group)-+m;给我#ffffff和black#000000-#ffffff-和black-#000000结尾,所以唯一缺少的是最后一个单词,它没有被考虑在内,所以无论第二个hex之后是什么,都应该删除边界匹配器(^$
)如果你想在句子的中间找到Hexes,我把它们放在哪里?我在末尾的**(\W+)上尝试过,然后WookDaHA是非常有用和深入解释的。谢谢!