import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "\\[.+?\\](?![\\.])";
final String string = "I am parsing some SQL statements and have found places where the SELECT statement may be:\n\n"
+ "SELECT [tblCustomer].[FirstName], [tblCustomer.LastName], [tblOrder].[Order_No]\n\n"
+ "and as you see the second column has a `.` inside the square brackets. This is acceptable in Access SQL but not SQL Server. I'm trying to build a RegEx to identify when there is a `.` inside square brackets and replace it with `].[`\n\n"
+ "I've tried: `\\[.+?\\](?![\\.])` which will get me a period inside square brackets but it doesn't stop searching when it finds the closing bracket.\n\n"
+ "I'm using ECMAScript to be compatible with VBA and I don't have concerns about nested brackets.\n\n\n"
+ "Another example:\n"
+ "SELECT IIf([tbl_ref_Service].[Root_Service] Is Null,[tbl_ref_Service].[Service],[tbl_ref_Service].[Root_Service]) AS Root_Service, tbl_POC_Assigned.POC_ID, [tbl_POC_Assigned.Hex_ID] & \"_\" & [tbl_Hex.Generic_ID] & \"_\" & [tbl_Lateral.Service_ID] & \"_\" & [tbl_Hex.ODD_Micap] & \"_Null\" AS Tool_Generic_Line, tbl_Hex.Building_ID AS Hex_Building_ID, tbl_POC.Lateral_ID, tbl_Generic_Service.Peak_Flow, [Diversity_Factor]*[Peak_Flow] AS Avg_Flow, tbl_POC_Assigned.Flow, tbl_POC_Assigned.Flow_Avg";
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
}
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Java, please visit: https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html