Java Regex允许字符模式,但不允许该模式中的单个字符

Java Regex允许字符模式,但不允许该模式中的单个字符,java,regex,string,Java,Regex,String,我正在尝试创建一个正则表达式,它将执行以下操作 匹配字符串,如果: 字符串介于4-35个字符之间 字符串必须包含$作为字符串中的最后一个字符 字符串不包含任何$,除非美元符号被包装在括号内,即[$] 我目前有以下正则表达式:[^\$]{3,34}\$$ 你可以看到这个例子 这捕获到除了结尾之外不允许使用$,但是如果美元符号被包装在括号内,我仍然需要允许使用美元符号[$]。如何添加“允许”[$]的方法 一些正面的例子: ABCD$ ABC[$]D$ [$]ABCDEFG$ !@#%^&*[$

我正在尝试创建一个正则表达式,它将执行以下操作

匹配字符串,如果:

  • 字符串介于4-35个字符之间
  • 字符串必须包含
    $
    作为字符串中的最后一个字符
  • 字符串不包含任何
    $
    ,除非美元符号被包装在括号内,即
    [$]
我目前有以下正则表达式:
[^\$]{3,34}\$$

你可以看到这个例子

这捕获到除了结尾之外不允许使用
$
,但是如果美元符号被包装在括号内,我仍然需要允许使用美元符号
[$]
。如何添加“允许”
[$]
的方法

一些正面的例子:

  • ABCD$
  • ABC[$]D$
  • [$]ABCDEFG$
  • !@#%^&*[$]^%$
一些负面的示例:

  • AB$CD
  • ABCD
  • $$ABCD$
  • AB$[$]CD$
您可以使用

^(?=.{4,35}$)(?:\[\$]|[^$])*\$$

详细信息

  • ^
    -字符串的开头(如果该模式与
    匹配()一起使用,则可以省略)
  • (?=.{4,35}$)
    -一个正向前瞻,要求字符串中有4到35个字符
  • (?:\[\$]\[^$])*
    -0+
    [$]
    子字符串或除
    $
    以外的任何字符
  • \$
    -文字
    $
  • $
    -字符串结尾(如果与
    匹配项()一起使用,则可以省略)
:

结果:

ABCD$: true
ABC[$]D$: true
[$]ABCDEFG$: true
!@#%^&*[$]^%$: true
AB$CD: false
ABCD: false
$$ABCD$: false
AB$[$]CD$: false
ABCD$: true
ABC[$]D$: true
[$]ABCDEFG$: true
!@#%^&*[$]^%$: true
AB$CD: false
ABCD: false
$$ABCD$: false
AB$[$]CD$: false