regex 正则表达式模式检查

xzv2uavs  于 2023-03-04  发布在  其他
关注(0)|答案(2)|浏览(189)

我必须为这种类型的字符串创建一个正则表达式检查:

"TEST_PROCESS_"+${variable}
"TEST_PROCESS_"+${variable}+"_PRODUCT"
"TEST_PROCESS_"+${variable}+"_PRODUCT_NEW"

这是我的正则表达式检查:

\"(?:[A-Z]+_{1})+\"\+\$\{[a-z]+}(\+\"_{1}[A-Z_]+\")?

这是我的代码:

String test = "\"TEST_PROCESS_\"+${variable}+\"_PRODUCT\""; 
if (Pattern.matches("\"(?:[A-Z]+_{1})+\"\\+\\$\\{[a-z]+}(\\+\"_{1}[A-Z_]+\")?", test))        
System.out.println("valid format");

我遇到的问题是以下类型的字符串在不应该匹配的时候匹配了:

"TEST_PROCESS_"+${variable}+"_PRODUCT_"         the last _ is not ok
"TEST_PROCESS_"+${variable}+"__PRODUCT"        __ should not pass

谢谢大家!

fdx2calv

fdx2calv1#

对于${variable}之后的部分,可以使用与之前部分相同的技术,并且需要将正则表达式固定在行首和行尾:

^\"(?:[A-Z]+_)+\"\+\$\{[a-z]+\}(?:\+\"(?:_[A-Z]+)+\")?$

演示here

llycmphe

llycmphe2#

您必须限制在每个下划线之后必须至少有一个字符。

^[A-Z](_[A-Z]|[A-Z])*$

如果您希望捕获或不捕获的组,则可以使用此选项

^[A-Z](?:_[A-Z]|[A-Z])*$

经过字符串的 Package 和连接后,它将变成

final private static String PATTERN = """
^"[A-Z](?:_[A-Z]|[A-Z])*_"\+\$\{[a-z]+\}\+"(?:_[A-Z]|[A-Z])*"$
""";

从Java15开始,你可以使用文本块,这有助于不必要的引号转义。

相关问题