Java Regex接受限定符中的任何内容

bkhjykvo  于 2023-08-08  发布在  Java
关注(0)|答案(2)|浏览(118)

我需要一个有点棘手的java正则表达式模式来实现以下内容。
接受任何带有限定词“$$”的内容,类似下面的内容可以完成大部分工作:

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

字符串
这将接受如下字符串:"$$ANYTHING$$""$$A$@#$@NYTHING!!!$$"
但我想禁止:$$abc$$xyz$$,因为它在中间包含"$$"!请告诉我一个方法来实现这一点。此外,应拒绝$$$$xyz$$$$xyz$$$$

tjrkku2a

tjrkku2a1#

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

字符串
只需添加锚点和负向前看,以确保$$不在中间。
参见demo。
https://regex101.com/r/sH8aR8/8
你的正则表达式的问题是[\\$\\$]只接受$一次,因为它是在字符类中,没有^$,它对边界不严格。.*也会接受任何东西,这就是为什么你的第二个$被接受。
(?:(?!\\$\\$).)*确保$$不会在中间发生。

编辑

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

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

cetgtptt

cetgtptt2#

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

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

字符串

相关问题