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

时间:2015-01-07 07:02:21

标签: java regex

我需要一些棘手的java正则表达式模式来实现以下目的。

接受任何与资格赛人说“$$”的事情。像下面这样的事情完成了大部分工作:

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

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

但我想禁止:$$abc$$xyz$$,因为它包含"$$"!请告诉我一种方法来实现这一目标。此外,$$$$xyz$$$$xyz$$$$也应被拒绝

2 个答案:

答案 0 :(得分:3)

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

只需添加锚点和预示性前瞻,以确保$$不在中间。

参见演示。

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

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

(?:(?!\\$\\$).)*确保$$之间不会发生。{/ p>

编辑:

如果未确定$的计数,请使用

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

答案 1 :(得分:0)

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

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