我想在Java中创建一个与以下内容匹配的正则表达式:
* A * B
其中A和B是除星号外的任何字符,并且可以有任意数量的A字符和B字符。 A(s)前面带有星号,B(s)前面带有星号。
以下是否有效?我跑的时候似乎工作,但我想绝对肯定。
Pattern.matches("\\A\\*([^\\*]{1,})\\*([^\\*]{1,})\\Z", someString)
答案 0 :(得分:3)
它会起作用,但是您可以将其重写为(未引用):
\A\*([^*]+)\*([^*]+)\Z
{1,}
和+
是相同的量词(一次或多次)。注1:您使用.matches()
自动锚定正则表达式的开头和结尾;因此,您可以不使用\A
和\Z
。
注2:我保留了捕获组 - 你真的需要它们吗?
注3:目前还不清楚是否要在星星之间重复相同的字符;上面的例子假定没有。如果你想要相同,那就用这个:
\A\*(([^*])\2*)\*(([^*])\4*)\Z
答案 1 :(得分:0)
如果我弄错了......它可以像
一样简单^\\*((?!\\*).)+\\*((?!\\*).)+
答案 2 :(得分:0)
如果您希望在*AAA*BBB
上匹配但不在*ABC*DEF
上使用
^\*([a-zA-Z])\1*\*([a-zA-Z])\2*$
这与此无法匹配
*A_$-123*B<>+-321