Java正则表达式接受限定符中的任何内容

Java正则表达式接受限定符中的任何内容,java,regex,Java,Regex,我需要一个有点棘手的java正则表达式模式来实现以下内容 接受限定符中显示“$$”的任何内容,如下所示的内容将完成大部分工作: Pattern rc = Pattern.compile("[\\$\\$].*[\\$\\$]"); 这将接受如下字符串:“$$ANYTHING$$”,“$$A$@#$@NYTHING!!!$”等 不过,我想禁止: $ABC $ $XYZ $ $/CUT>,因为它包含“代码> $$”/代码>中间!请告诉我实现这一目标的方法。另外,应拒绝$$$$$xyz$$和$$xy

我需要一个有点棘手的java正则表达式模式来实现以下内容

接受限定符中显示“$$”的任何内容,如下所示的内容将完成大部分工作:

Pattern rc = Pattern.compile("[\\$\\$].*[\\$\\$]");
这将接受如下字符串:
“$$ANYTHING$$”
“$$A$@#$@NYTHING!!!$”

不过,我想禁止:<代码> $ABC $ $XYZ $ $/CUT>,因为它包含“代码> $$”/代码>中间!请告诉我实现这一目标的方法。另外,应拒绝

$$$$$xyz$$
$$xyz$$$$$$

^\\$\\$(?:(?!\\$\\$).)*\\$\\$$
只需添加锚点和一个nactive lookahead,以确保
$
不在中间位置

见演示

你的正则表达式的问题是
[\\$\\$]
只接受
$
一次,因为它在字符类内,没有
^
并且
$
它不会严格限制边界。而且
*
也会接受任何你的第二个
$
被接受的原因

(?:(?!\\$\$)*
确保
$$
不会出现在两者之间

编辑:

如果
$
的计数不固定,请使用

^\\$+(?:(?!\\$).)*\\$+$

从另一个角度看,第一个$$后面没有2“$$”:

^\\$\\$(?!(.*?\\$\\$){2}).*\\$\\$$

输入字符串总是以
$$
开头和结尾?将内容放在方括号中似乎是一个常见的错误。我真的不知道为什么。正则表达式中的方括号表示“匹配一个字符,如果该字符是方括号内列出的字符之一”。因此模式
[\\$\$]
将匹配单个
$
,而不是两个字符的
$$
序列。很棒的工具!您的模式满足除此之外的大多数情况:$$xyz$$$这应该被接受。完美。正是我所需要的。:)你比我快了15秒+1@anubhava您提供的$$xyz$$$也失败。但thanksHmm可能是您所需要的:
^\\${2}[^$]*\\${2}$“