Java “如何匹配”;“任何字符”;在正则表达式中?

Java “如何匹配”;“任何字符”;在正则表达式中?,java,regex,Java,Regex,应匹配以下各项: AAA123 ABCDEFGH123 XXXX123 我能做什么:“*123”?使用模式匹配任何字符一次,*匹配任何字符零次或多次,+匹配任何字符一次或多次。可以。这应该行得通 =除换行符外的任何字符 \。=实际的点字符 ?={0,1}=匹配除换行符以外的任何字符零次或一次 *={0,}=匹配除换行符以外的任何字符零次或多次 +={1,}=匹配除换行符以外的任何字符一次或多次 否,*将匹配零个或多个字符。您应该使用与一个或多个匹配的+ 这个表达式可能更适合您:[A-Z]+1

应匹配以下各项:

AAA123
ABCDEFGH123
XXXX123

我能做什么:
“*123”

使用模式
匹配任何字符一次,
*
匹配任何字符零次或多次,
+
匹配任何字符一次或多次。

可以。这应该行得通

  • =除换行符外的任何字符
  • \。
    =实际的点字符
  • =
    {0,1}
    =匹配除换行符以外的任何字符零次或一次
  • *
    =
    {0,}
    =匹配除换行符以外的任何字符零次或多次
  • +
    =
    {1,}
    =匹配除换行符以外的任何字符一次或多次

否,
*
将匹配零个或多个字符。您应该使用与一个或多个匹配的
+


这个表达式可能更适合您:
[A-Z]+123

有很多复杂的正则表达式测试和开发工具,但是如果您只想在Java中使用一个简单的测试工具,这里有一个供您使用的工具:

    String[] tests = {
        "AAA123",
        "ABCDEFGH123",
        "XXXX123",
        "XYZ123ABC",
        "123123",
        "X123",
        "123",
    };
    for (String test : tests) {
        System.out.println(test + " " +test.matches(".+123"));
    }
现在您可以轻松地添加新的测试用例并尝试新的模式。享受探索正则表达式的乐趣

另见

是,这将起作用,但请注意,
将不匹配换行符,除非在编译表达式时传递该标志:

Pattern pattern = Pattern.compile(".*123", Pattern.DOTALL);
Matcher matcher = pattern.matcher(inputStr);
boolean matchFound = matcher.matches();

尝试正则表达式
{3,}
。这将匹配除新行以外的所有字符。

示例问题的特定解决方案:-

尝试
[A-Z]*123$
将匹配
123
AAA123
ASDFRRF123
。如果在
123
之前至少需要一个字符,请使用
[a-Z]+123$

问题的一般解决方案(如何匹配正则表达式中的“任意字符”):

  • 如果您正在查找任何内容,包括空格,您可以尝试
    [\w |\w]{min_char\u to_match,}
  • 如果您试图匹配除空白以外的任何内容,可以尝试
    [\S]{min\u char\u to\u match,}

  • 我工作这并不总是点意味着任何字符。单线模式时出现异常<代码>\p{all}应为

    String value = "|°¬<>!\"#$%&/()=?'\\¡¿/*-+_@[]^^{}";
    String expression = "[a-zA-Z0-9\\p{all}]{0,50}";
    if(value.matches(expression)){
        System.out.println("true");
    } else {
        System.out.println("false");
    }
    
    String value=“|”、!\“\$%&/()=?”\\\/*-+\@[]^^{}”;
    字符串表达式=“[a-zA-Z0-9\\p{all}]{0,50}”;
    if(value.matches(表达式)){
    System.out.println(“真”);
    }否则{
    System.out.println(“假”);
    }
    
    我见过的最常见的编码方式是使用字符类,其成员构成所有可能字符集的分区


    通常人们把它写成
    [\s\s]
    (空白或非空白),尽管
    [\w\w]
    [\d\d]
    等都可以。
    [^]
    应该匹配任何字符,包括换行符。
    [^
    字符
    ]
    匹配除字符中的字符外的所有字符。如果字符为空,则匹配所有字符

    JavaScript示例:

    /a[^]*Z/.test("abcxyz \0\r\n\t012789ABCXYZ") // Returns ‘true’.
    
    *
    +
    适用于除新行以外的任何字符

    双重逃逸 为了以防万一,您可能希望包含新行,以下表达式也可能适用于需要双重转义的语言,如Java或C++:

    [\\s\\S]*
    [\\d\\D]*
    [\\w\\W]*
    
    零次或多次,或

    [\\s\\S]+
    [\\d\\D]+
    [\\w\\W]+
    
    一次或多次

    单个转义: 有些语言不需要双重转义,如C#、PHP、Ruby、PERL、Python、JavaScript:

    [\s\S]*
    [\d\D]*
    [\w\W]*
    [\s\S]+
    [\d\D]+
    [\w\W]+
    
    试验 输出
    如果您希望探索表达式,它已在的右上面板中进行了解释。如果您愿意,您还可以在中查看,它将如何与一些示例输入匹配


    正则表达式电路 可视化正则表达式:


    Upvote for the regular-expressions.info链接。这是学习正则表达式和参考的绝佳网站。这是一些非常有用的信息!我假设
    会匹配换行符。我很高兴我读到了你的答案,我需要使用它!有时你可能还需要在无法使用正则表达式的上下文中匹配Java正则表达式中的换行符ss Pattern.DOTALL,例如在Eclipse中执行多行正则表达式搜索时,或作为提供正则表达式搜索的任何Java应用程序的用户。基于,您可能需要使用
    {.,\n\r\u2028\u2029\u0085}
    来绝对匹配任何字符(Unicode字符是附加的行终止字符,在Java中不与
    匹配),但只要
    {,\n\r}
    就可以用于大多数文本文件。@TheodoreMurdock
    [\s\s]
    是一种常用的匹配任何字符的方法,如果您不能使用DOTALL。如果您想到这一点,请不要使用
    (?:。\\v)*
    ,因为这里有.Upvote。OP没有指定,但是添加模式将匹配任何字符,包括OP可能不需要的####123、123123、%$#123。上面@Huusom使用的字符类将使OP只使用可能是有意使用的大写字母字符。此链接显示一个似乎有效的方法-->[^]+表示“不匹配任何字符”,这是一个双负数,可以重新读取为“匹配任何字符”。源-不总是点表示任何字符。单行模式下例外。\p{all}您应该如何将反斜杠包含在此字符列表中?@pipilongstocking-backward-slash是“\\`如何包含新行?”作为参考,from:“JavaScript和VBScript没有使点匹配换行字符的选项。在这些语言中,您可以使用字符类,如[\s\s]匹配任何字符。此字符匹配空白字符(包括换行字符)或非空白字符。由于所有字符都是空白或非空白字符,因此此字符类匹配任何字符。“投票支持这个答案。被接受的答案不能回答问题,但这个答案可以。你介意添加一些代码让我们知道你尝试了什么吗?这里不是已经回答了吗?我喜欢
    (\W |\W)*import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    
    public class RegularExpression{
    
        public static void main(String[] args){
    
            final String regex_1 = "[\\s\\S]*";
            final String regex_2 = "[\\d\\D]*";
            final String regex_3 = "[\\w\\W]*";
            final String string = "AAA123\n\t"
                 + "ABCDEFGH123\n\t"
                 + "XXXX123\n\t";
    
            final Pattern pattern_1 = Pattern.compile(regex_1);
            final Pattern pattern_2 = Pattern.compile(regex_2);
            final Pattern pattern_3 = Pattern.compile(regex_3);
    
            final Matcher matcher_1 = pattern_1.matcher(string);
            final Matcher matcher_2 = pattern_2.matcher(string);
            final Matcher matcher_3 = pattern_3.matcher(string);
    
            if (matcher_1.find()) {
                System.out.println("Full Match for Expression 1: " + matcher_1.group(0));
            }
    
            if (matcher_2.find()) {
                System.out.println("Full Match for Expression 2: " + matcher_2.group(0));
            }
            if (matcher_3.find()) {
                System.out.println("Full Match for Expression 3: " + matcher_3.group(0));
            }
        }
    }
    
    Full Match for Expression 1: AAA123
        ABCDEFGH123
        XXXX123
    
    Full Match for Expression 2: AAA123
        ABCDEFGH123
        XXXX123
    
    Full Match for Expression 3: AAA123
        ABCDEFGH123
        XXXX123