我确实有一个遵循特定语法的字符串。
字符串可能是这样的:
String query = query1 (param1,param2), query2, query3, query4 (param1);
没有可用的常用词。所有查询/参数可以是任何可能包含字符和数字的字符串。
我们需要一个正则表达式来分割此表单,使其返回:
query1 (param1,param2)
query2
query3
query4 (param1)
目前我已经使用了这个正则表达式 "\\),"
就像: query.split ("\\),");
所以它返回以下结果:
query1 (param1,param2
query2, query3, query4 (param1
我需要更正这个正则表达式吗?使用正则表达式来分割这种形式的字符串是否可行?
最佳答案
解决方案
您可以使用此正则表达式来实现您所需要的:
\s?(.+?)[,;](?![\w,]+?\))
这是执行匹配的代码片段:
String query = "query1 (param1,param2,param3), query2, query3, query4 (param1);";
String pattern = "\\s?(.+?)[,;](?![\\w,]+?\\))";
List<String> list = new ArrayList<String>();
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(query);
while (m.find()) {
list.add(m.group(1));
}
System.out.println(list); // [query1 (param1,param2,param3), query2, query3, query4 (param1)]
说明
我们使用括号创建一个捕获组,并告诉它在看到 ,
或 ;
字符时结束,但前提是没有 )紧随其后的
(这就是负向前瞻的用途 - (?!\w+?\))
)
我们还想删除前导空格,因此我们在捕获组之外添加了 \s?
部分。
关于java - 正则表达式分割遵循 ABNF 形式的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61362271/