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

时间:2010-05-26 12:29:35

标签: java regex

以下内容应该匹配:

AAA123
ABCDEFGH123
XXXX123
我可以这样做:".*123"

12 个答案:

答案 0 :(得分:519)

是的,你可以。这应该有用。

  • . =任何字符
  • \. =实际的点字符
  • .? = .{0,1} =匹配任何char零或一次
  • .* = .{0,} =匹配任何char零次或多次
  • .+ = .{1,} =匹配任何字符一次或多次

答案 1 :(得分:47)

是的,虽然会有效,但请注意.与新行不匹配,除非您在编译表达式时传递DOTALL标志:

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

答案 2 :(得分:15)

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

答案 3 :(得分:10)

有许多复杂的正则表达式测试和开发工具,但如果您只想要一个简单的Java测试工具,那么可以使用以下工具:

    String[] tests = {
        "AAA123",
        "ABCDEFGH123",
        "XXXX123",
        "XYZ123ABC",
        "123123",
        "X123",
        "123",
    };
    for (String test : tests) {
        System.out.println(test + " " +test.matches(".+123"));
    }

现在您可以轻松添加新的测试用例并尝试新的模式。享受探索正则表达式的乐趣。

另见

答案 4 :(得分:7)

不,*将匹配零个或多个字符。您应该使用+,而不是匹配一个或多个。

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

答案 5 :(得分:2)

试试正则表达式。{3,}。这将匹配所有期望换行的字符。

答案 6 :(得分:2)

示例问题的具体解决方案:-

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

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

  1. 如果您要查找包括空格在内的任何内容,可以尝试[\ w | \ W] {min_char_to_match,}。
  2. 如果您要匹配空格以外的任何内容,可以尝试[\ S] {min_char_to_match,}。

答案 7 :(得分:2)

  

.*.+适用于除换行符以外的任何字符。

双重转义

为防万一,您可能想添加换行,对于那些需要双重转义的语言,例如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]+

测试

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

如果您想探索该表达式,请在regex101.com的右上角进行解释。如果愿意,您还可以在this link中查看它如何与某些示例输入匹配。


RegEx电路

jex.im可视化正则表达式:

enter image description here

答案 8 :(得分:1)

[^]应该匹配任何字符,包括换行符。 [^ CHARS ]匹配除 CHARS 中的所有字符以外的所有字符。如果 CHARS 为空,则匹配所有字符。

JavaScript示例:

/a[^]*Z/.test("abcxyz \0\r\n\t012789ABCXYZ") // Returns ‘true’.

答案 9 :(得分:0)

我看到的最常见的编码方式是使用字符类,其成员构成所有可能字符集的分区。

通常,人们将其写为[\s\S](空白或非空白),尽管[\w\W][\d\D]等都可以使用。

答案 10 :(得分:0)

一个帮助了我的人,以防万一您有兴趣检查任何字符

[^]+

答案 11 :(得分:-1)

我工作这个并非总是点代表任何字符。单行模式时例外。 \ 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");
    }`