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}).*\$\$$
我需要一些技巧 java 正则表达式模式来实现以下目标。
接受带有限定词“$$”的任何内容大部分工作如下所示:
Pattern rc = Pattern.compile("[\$\$].*[\$\$]");
这将接受如下字符串:"$$ANYTHING$$"
、"$$A$@#$@NYTHING!!!$$"
等
但是我想禁止:$$abc$$xyz$$
因为它在中间包含 "$$"
!请告诉我实现这一目标的方法。另外 $$$$xyz$$
和 $$xyz$$$$
应该被拒绝
^\$\$(?:(?!\$\$).)*\$\$$
只需添加锚点和 nagtive 前瞻以确保 $$
不在中间。
查看演示。
https://regex101.com/r/sH8aR8/8
你的正则表达式的问题是 [\$\$]
将只接受一次 $
因为它在字符 class 内并且没有 ^
和 $
它不会严格 boundaries.Also .*
会接受任何东西,这就是为什么你的第二个 $
被接受了。
(?:(?!\$\$).)*
确保 $$
不会出现在两者之间。
编辑:
如果 $
的计数不固定使用
^\$+(?:(?!\$).)*\$+$
另一种看待它的方式是在第一个 $$ 之后没有 2 个“$$”:
^\$\$(?!(.*?\$\$){2}).*\$\$$