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,我的要求是: 字符串应至少包含4个字符(仅字母数字, 允许使用点和连字符) 除此之外,任何地方都允许使用星号(开始、中间或结束) 它不应包含上文第1点和第2点提到的任何其他字符 e、 g.以下是有效字符串: Ab*08 *.6-*N* ****AB-* GH.* 以下是无效字符串: Ab*08 *.6-*N* ****AB-* GH.* 我的正则表达式看起来像: ^(.*?[a-zA-Z0-9.\-]){4,}.*$ 我在第1点和第2点中提到的基本验证工作正常。但是正则表达式允

我的要求是:

  • 字符串应至少包含4个字符(仅字母数字, 允许使用点和连字符)
  • 除此之外,任何地方都允许使用星号(开始、中间或结束)
  • 它不应包含上文第1点和第2点提到的任何其他字符
  • e、 g.以下是有效字符串:

    Ab*08
    
    *.6-*N*
    
    ****AB-*
    
    GH.*
    
    以下是无效字符串:

    Ab*08
    
    *.6-*N*
    
    ****AB-*
    
    GH.*
    
    我的正则表达式看起来像:

    ^(.*?[a-zA-Z0-9.\-]){4,}.*$
    
    我在第1点和第2点中提到的基本验证工作正常。但是正则表达式允许使用其他特殊字符,如,&等。如何修改正则表达式来实现这一点?

    您可以使用

    ^(?:[*]*[a-zA-Z0-9.-]){4}[*a-zA-Z0-9.-]*$
    
    它检查4个有效字符(可能被
    *
    包围),并检查整个字符串是否只包含所需的字符

    注意:regex101不完全支持java正则表达式语法。所示的模式是PCRE模式,但所使用的所有功能在java正则表达式中也可用

    注2:如果使用
    .matches
    检查输入,可以省略锚定,因为它已经被锚定

    ^(?:\**[\w\d.-]\**){4,}$
    

    这应该可以做到。稍微简单一点。

    匹配除换行符以外的任何字符。此外,你的要求也不清楚。请解释为什么这个或那个输入无效。@WiktorStribiżew:正如我在问题中提到的3点。我的字符串应至少包含4个字符(字母数字、点或连字符)。字符串还可以在任何地方包含星号。除这些字符外,它不应包含任何其他字符。为了解释这一点,我举了几个例子。@user613114我建议您删除星号,然后对结果字符串运行正则表达式检查。这样会简单得多。我想德尔塔里斯解释了这个谜:
    *
    在计算时不应该被考虑。试试
    ^(?=(?:\**[a-zA-Z0-9.-]){4}[a-zA-Z0-9.*-]+$
    我认为正则表达式的核心问题是:你不能解决它们的所有问题。每当你需要别人为你创建正则表达式时;很有可能你在寻找一个你不理解的解决方案。当您将正则表达式添加到代码中时,它将成为您的责任。所以,至少对我来说;每次当我想到“嗯,我可以用一个正则表达式来做这个”;但我真的很不愿意自己去建造它;我在寻找其他选择;-)我向你致敬,这就是诀窍。但是,尝试匹配星号已被空字符替换的字符串感觉更令人满意(可读/可维护)的解决方案。这将失败,当要测试的字符串中包含超过4个字符时。@Waxolunist它正确匹配
    ABCDEFG。--******
    所以不确定您在说什么。@SebastianProske:您的正则表达式在这个问题中工作正常:)非常感谢您的时间@你能给我们一些例子字符串吗,这个正则表达式不起作用?