Java正则表达式接受限定符中的任何内容
我需要一个有点棘手的java正则表达式模式来实现以下内容 接受限定符中显示“$$”的任何内容,如下所示的内容将完成大部分工作:Java正则表达式接受限定符中的任何内容,java,regex,Java,Regex,我需要一个有点棘手的java正则表达式模式来实现以下内容 接受限定符中显示“$$”的任何内容,如下所示的内容将完成大部分工作: Pattern rc = Pattern.compile("[\\$\\$].*[\\$\\$]"); 这将接受如下字符串:“$$ANYTHING$$”,“$$A$@#$@NYTHING!!!$”等 不过,我想禁止: $ABC $ $XYZ $ $/CUT>,因为它包含“代码> $$”/代码>中间!请告诉我实现这一目标的方法。另外,应拒绝$$$$$xyz$$和$$xy
Pattern rc = Pattern.compile("[\\$\\$].*[\\$\\$]");
这将接受如下字符串:“$$ANYTHING$$”
,“$$A$@#$@NYTHING!!!$”
等
不过,我想禁止:<代码> $ABC $ $XYZ $ $/CUT>,因为它包含“代码> $$”/代码>中间!请告诉我实现这一目标的方法。另外,应拒绝
$$$$$xyz$$
和$$xyz$$$$$$
^\\$\\$(?:(?!\\$\\$).)*\\$\\$$
只需添加锚点和一个nactive lookahead,以确保$
不在中间位置
见演示
你的正则表达式的问题是[\\$\\$]
只接受$
一次,因为它在字符类内,没有^
并且$
它不会严格限制边界。而且*
也会接受任何你的第二个$
被接受的原因
(?:(?!\\$\$)*
确保$$
不会出现在两者之间
编辑:
如果$
的计数不固定,请使用
^\\$+(?:(?!\\$).)*\\$+$
从另一个角度看,第一个$$后面没有2“$$”:
^\\$\\$(?!(.*?\\$\\$){2}).*\\$\\$$
输入字符串总是以
$$
开头和结尾?将内容放在方括号中似乎是一个常见的错误。我真的不知道为什么。正则表达式中的方括号表示“匹配一个字符,如果该字符是方括号内列出的字符之一”。因此模式[\\$\$]
将匹配单个$
,而不是两个字符的$$
序列。很棒的工具!您的模式满足除此之外的大多数情况:$$xyz$$$这应该被接受。完美。正是我所需要的。:)你比我快了15秒+1@anubhava您提供的$$xyz$$$也失败。但thanksHmm可能是您所需要的:^\\${2}[^$]*\\${2}$“