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点中提到的基本验证工作正常。但是正则表达式允
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:您的正则表达式在这个问题中工作正常:)非常感谢您的时间@你能给我们一些例子字符串吗,这个正则表达式不起作用?