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

Java Regex to accept anything within qualifier

我需要一些技巧 java 正则表达式模式来实现以下目标。

接受带有限定词“$$”的任何内容大部分工作如下所示:

Pattern rc = Pattern.compile("[\$\$].*[\$\$]");

这将接受如下字符串:"$$ANYTHING$$""$$A$@#$@NYTHING!!!$$"

但是我想禁止:$$abc$$xyz$$ 因为它在中间包含 "$$"!请告诉我实现这一目标的方法。另外 $$$$xyz$$$$xyz$$$$ 应该被拒绝

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

只需添加锚点和 nagtive 前瞻以确保 $$ 不在中间。

查看演示。

https://regex101.com/r/sH8aR8/8

你的正则表达式的问题是 [\$\$] 将只接受一次 $ 因为它在字符 class 内并且没有 ^$ 它不会严格 boundaries.Also .* 会接受任何东西,这就是为什么你的第二个 $ 被接受了。

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

编辑:

如果 $ 的计数不固定使用

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

另一种看待它的方式是在第一个 $$ 之后没有 2 个“$$”:

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