正则表达式以验证配置

问题描述 投票:0回答:1

我试图在Java中编写正则表达式来评估我的Spring配置文件中定义的配置。

配置看起来像

myConfig: (abc123, abcd-123*) | (abc123, xyz-124-321) | (abc111, *)

其中*在上面的配置中说它可以有任何东西。

我在里面提到了一对配置参数(),它们被|分开。管道(|)仅在有多个要定义的对时使用:( ) | ( )

它应至少定义一对。像下面的东西

myConfig: (abc123, abcd-123*)

我尝试下面的代码来验证(abc123, abcd-123)。如果这样可行,那么我可以继续复杂的正则表达式来匹配第一个例子。

String regPattern = "^.([a-zA-Z0-9].,[a-zA-Z0-9].)";
String test = "(123,inteasd)";
System.out.println(test.matches(regPattern));

但它没有按预期工作。请让我知道如何修复上面的一个,我打算使用这个模式匹配每个字符串表达式,通过使用|分割它们来验证第一个例子。

我可以通过解析字符串并在不使用正则表达式的情况下验证java中的预期格式来轻松完成此操作。但我想尝试使用正则表达式来查看这是否可以通过java正则表达式实现。

java regex pattern-matching
1个回答
1
投票

您必须使用Pattern文档。至少,你应该逃离()。在您的"(123,inteasd)"示例中,您可以使用

"\\([a-zA-Z0-9]+,[a-zA-Z0-9]+\\)"

这意味着(接着是1个或更多的a-zA-Z0-9,接着是,,接下来是......

接下来,(abc123, abcd-123*)可以类似地匹配

"\\([a-zA-Z0-9]+, [a-zA-Z0-9-]+.\\)"

*所代表的“任何东西”与.相匹配。此外,该对的第二个条目现在允许连字符。目前尚不清楚这些群体的确切结构是什么(是[a-zA-z]-[0-9]还是任何组合都可能?)所以这是一般性的。

复杂的(abc123, abcd-123*) | (abc123, xyz-124-321) | (abc111, *)案件再次棘手,因为它不清楚真正的限制是什么,但如果每对的第二个条目是[a-zA-Z0-9-]后跟任何东西(*)的任意组合,那么试试

"(\\([a-zA-Z0-9]+, [a-zA-Z0-9-]*.\\)(( \\| )|$))+"

这意味着,打破它:

  1. 一对:一个或多个a-zA-Z0-9,然后是,,然后是零或更多a-zA-Z0-9-,然后是任何东西(.)。周围环绕着()
  2. 一对可以跟随|(需要逃脱|,因为它意味着逻辑OR)或线的末端($)。
  3. 以上所有都存在一次或多次。
© www.soinside.com 2019 - 2024. All rights reserved.