我试图用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));
但是它没有按预期工作。请让我知道如何解决上述问题,并且我打算通过使用|
拆分每个字符串表达式来验证第一个示例,从而对每个字符串表达式使用此模式匹配。
我可以通过解析字符串并在不使用regex的情况下在java中验证期望的格式来轻松实现此目的。但是我想尝试使用正则表达式,看看使用Java regex是否可以实现。
答案 0 :(得分:1)
您必须使用Pattern
文档。至少,您应该转义(
和)
。在您的"(123,inteasd)"
示例中,您可以使用
"\\([a-zA-Z0-9]+,[a-zA-Z0-9]+\\)"
这意味着(
,然后是任何a-zA-Z0-9
中的1个或多个,之后是,
,后面是...
接下来,(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-]
的任意组合,然后是任何内容({{1 }}),然后尝试
*
意味着什么,将其分解:
一对:一个或多个"(\\([a-zA-Z0-9]+, [a-zA-Z0-9-]*.\\)(( \\| )|$))+"
,后跟a-zA-Z0-9
,然后是零个或多个,
,后跟任何东西(a-zA-Z0-9-
)。这些被.
和(
包围。
可以在一对之后加上)
(由于表示逻辑OR,因此必须转义|
)或行尾(|
)。
以上所有条件都存在一次或多次。