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是非常有用和深入解释的。谢谢!