我需要一个有点棘手的java正则表达式模式来实现以下内容。
接受任何带有限定词“$$”的内容,类似下面的内容可以完成大部分工作:
Pattern rc = Pattern.compile("[\\$\\$].*[\\$\\$]");
字符串
这将接受如下字符串:"$$ANYTHING$$"
、"$$A$@#$@NYTHING!!!$$"
等
但我想禁止:$$abc$$xyz$$
,因为它在中间包含"$$"
!请告诉我一个方法来实现这一点。此外,应拒绝$$$$xyz$$
和$$xyz$$$$
2条答案
按热度按时间tjrkku2a1#
字符串
只需添加锚点和负向前看,以确保
$$
不在中间。参见demo。
https://regex101.com/r/sH8aR8/8
你的正则表达式的问题是
[\\$\\$]
只接受$
一次,因为它是在字符类中,没有^
和$
,它对边界不严格。.*
也会接受任何东西,这就是为什么你的第二个$
被接受。(?:(?!\\$\\$).)*
确保$$
不会在中间发生。编辑
如果
$
的计数不固定,则使用型
cetgtptt2#
另一种看待它的方式是在第一个$$之后没有2个“$$”:
字符串