Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重构正则表达式模式-Java_Java_Regex - Fatal编程技术网

重构正则表达式模式-Java

重构正则表达式模式-Java,java,regex,Java,Regex,我有以下aaaa\u bb\u cc字符串要匹配,并编写了一个正则表达式模式,如 \\w{4}+\\\\\\\\w{2}\\\\\\\\\\\w{2}它可以工作。有没有简单的正则表达式可以做到这一点?您不需要转义下划线: \w{4}+_\w{2}_\w{2} 如果不捕获,可以折叠最后两部分: \w{4}+(?:_\w{2}){2} 但不会变短 (注意:如果您愿意,可以为Java字符串重新添加所需的反斜杠;我更愿意在谈论正则表达式时省略它们:)您不需要转义下划线: \w{4}+_\w{2}_\

我有以下
aaaa\u bb\u cc
字符串要匹配,并编写了一个正则表达式模式,如


\\w{4}+\\\\\\\\w{2}\\\\\\\\\\\w{2}
它可以工作。有没有简单的正则表达式可以做到这一点?

您不需要转义下划线:

\w{4}+_\w{2}_\w{2}
如果不捕获,可以折叠最后两部分:

\w{4}+(?:_\w{2}){2}
但不会变短


(注意:如果您愿意,可以为Java字符串重新添加所需的反斜杠;我更愿意在谈论正则表达式时省略它们:)

您不需要转义下划线:

\w{4}+_\w{2}_\w{2}
如果不捕获,可以折叠最后两部分:

\w{4}+(?:_\w{2}){2}
但不会变短


(注:如果你愿意的话,我宁愿在谈论正则表达式的时候忽略它们,而谈论正则表达式的时候,我更愿意在谈论正则表达式的时候忽略它们::)

是,你可以只使用<代码>{{{{4}{{{{4}{{{{4}{{{{{2}{{{{2{{{{{{{2}{{2}{2}{{{{{2}{{{{{{2}{2}{{{{2}{{2}{2}{2}{{{{{2}{{2}{{{{{{{2}{2}{{2}{{{{2}{2}{}{2}

看起来您的\w不需要匹配下划线,因此您可以使用
[a-zA-Z0-9]

[a-zA-Z0-9]{4}_[a-zA-Z0-9]{2}_[a-zA-Z0-9]{2}

看起来您的\w不需要匹配下划线,因此您可以使用
[a-zA-Z0-9]

[a-zA-Z0-9]{4}_[a-zA-Z0-9]{2}_[a-zA-Z0-9]{2}

我有时会做我称之为“meta regexing”的事情,如下所示:

    String pattern = "x{4}_x{2}_x{2}".replace("x", "[a-z]");
    System.out.println(pattern); // prints "[a-z]{4}_[a-z]{2}_[a-z]{2}"
请注意,这不使用可以匹配下划线的
\w
。也就是说,您的原始模式将与
匹配

如果确实需要将
x
替换为
[a-zA-Z0-9]
,则只需在一个位置(而不是三个位置)执行即可

其他例子

我有时会做我称之为“meta regexing”的事情,如下所示:

    String pattern = "x{4}_x{2}_x{2}".replace("x", "[a-z]");
    System.out.println(pattern); // prints "[a-z]{4}_[a-z]{2}_[a-z]{2}"
请注意,这不使用可以匹配下划线的
\w
。也就是说,您的原始模式将与
匹配

如果确实需要将
x
替换为
[a-zA-Z0-9]
,则只需在一个位置(而不是三个位置)执行即可

其他例子

对于正则表达式,您的表达式非常简单。=)对于正则表达式,您的表达式非常简单。=)对我能理解;)对我能理解;)@UK:基本上,这个想法是,您不需要显式地写出实际的正则表达式。如果以编程方式派生正则表达式使其更具可读性/可维护性,那么ahead@UK:基本上,这个想法是不需要显式写出实际的正则表达式。如果以编程方式派生正则表达式使其更具可读性/可维护性,那么就直接使用该正则表达式。然而,Java中的
\w
真的只是
[a-zA-Z0-9]
?在.NET中,至少
\d
\w
与十进制数字或字母几乎匹配,但没有匹配。然而,Java中的
\w
真的只是
[a-zA-Z0-9]
?在.NET中,至少
\d
\w
与十进制数字或字母的任何内容都匹配。