Java正则表达式模式匹配

时间:2013-05-23 17:01:37

标签: java regex pattern-matching

我想在Java中创建一个与以下内容匹配的正则表达式:

* A * B

其中A和B是除星号外的任何字符,并且可以有任意数量的A字符和B字符。 A(s)前面带有星号,B(s)前面带有星号。

以下是否有效?我跑的时候似乎工作,但我想绝对肯定。

Pattern.matches("\\A\\*([^\\*]{1,})\\*([^\\*]{1,})\\Z", someString)

3 个答案:

答案 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