我需要一些棘手的java正则表达式模式来实现以下目的。
接受任何与资格赛人说“$$”的事情。像下面这样的事情完成了大部分工作:
Pattern rc = Pattern.compile("[\\$\\$].*[\\$\\$]");
这将接受以下字符串:"$$ANYTHING$$"
,"$$A$@#$@NYTHING!!!$$"
等。
但我想禁止:$$abc$$xyz$$
,因为它包含"$$"
!请告诉我一种方法来实现这一目标。此外,$$$$xyz$$
和$$xyz$$$$
也应被拒绝
答案 0 :(得分:3)
^\\$\\$(?:(?!\\$\\$).)*\\$\\$$
只需添加锚点和预示性前瞻,以确保$$
不在中间。
参见演示。
https://regex101.com/r/sH8aR8/8
你的正则表达式的问题是[\\$\\$]
只接受$
一次,因为它在字符类中并且没有^
和$
它对边界不严格。也.*
会接受任何你的第二个$
被接受的原因。
(?:(?!\\$\\$).)*
确保$$
之间不会发生。{/ p>
编辑:
如果未确定$
的计数,请使用
^\\$+(?:(?!\\$).)*\\$+$
答案 1 :(得分:0)
另一种看待它的方式是没有2" $$"在第一个$$之后:
^\\$\\$(?!(.*?\\$\\$){2}).*\\$\\$$