one search bug fix & format some code (#235)

diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/common/util/Constants.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/common/util/Constants.java
index 4fab1db..86d9d2b 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/common/util/Constants.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/common/util/Constants.java
@@ -45,6 +45,7 @@
     public static final String PUNCTUATION_SEPARATOR_POINT = "\\.";
     public static final String INTERROGATION_POINT = "?";
     public static final String ANY_VALUE = "*";
+    public static final String PLUS_SIGNS = "+";
     public static final String IP = "ip";
     public static final String INTERFACE_KEY = "interface";
     public static final String VERSION_KEY = "version";
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/service/RegistryServerSync.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/service/RegistryServerSync.java
index 7a9b1fa..7a4a676 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/service/RegistryServerSync.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/service/RegistryServerSync.java
@@ -60,9 +60,11 @@
      */
     private final ConcurrentHashMap<String, String> URL_IDS_MAPPER = new ConcurrentHashMap<>();
 
-    // ConcurrentMap<category, ConcurrentMap<servicename, Map<MD5, URL>>>
-    private final ConcurrentMap<String, ConcurrentMap<String, Map<String, URL>>>
-        registryCache = new ConcurrentHashMap<>();
+    /**
+     * ConcurrentMap<category, ConcurrentMap<servicename, Map<MD5, URL>>>
+     * registryCache
+     */
+    private final ConcurrentMap<String, ConcurrentMap<String, Map<String, URL>>> registryCache = new ConcurrentHashMap<>();
     @Autowired
     private Registry registry;
 
@@ -70,16 +72,19 @@
         return registryCache;
     }
 
+    @Override
     public void afterPropertiesSet() throws Exception {
         logger.info("Init Dubbo Admin Sync Cache...");
         registry.subscribe(SUBSCRIBE, this);
     }
 
+    @Override
     public void destroy() throws Exception {
         registry.unsubscribe(SUBSCRIBE, this);
     }
 
     // Notification of of any service with any type (override、subcribe、route、provider) is full.
+    @Override
     public void notify(List<URL> urls) {
         if (urls == null || urls.isEmpty()) {
             return;
@@ -89,7 +94,8 @@
         String interfaceName = null;
         for (URL url : urls) {
             String category = url.getParameter(Constants.CATEGORY_KEY, Constants.PROVIDERS_CATEGORY);
-            if (Constants.EMPTY_PROTOCOL.equalsIgnoreCase(url.getProtocol())) { // NOTE: group and version in empty protocol is *
+            // NOTE: group and version in empty protocol is *
+            if (Constants.EMPTY_PROTOCOL.equalsIgnoreCase(url.getProtocol())) {
                 ConcurrentMap<String, Map<String, URL>> services = registryCache.get(category);
                 if (services != null) {
                     String group = url.getParameter(Constants.GROUP_KEY);
@@ -155,4 +161,4 @@
         }
     }
 }
-    
+
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/service/impl/ProviderServiceImpl.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/service/impl/ProviderServiceImpl.java
index ed5ffa2..0786b8c 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/service/impl/ProviderServiceImpl.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/service/impl/ProviderServiceImpl.java
@@ -576,10 +576,13 @@
             }
             // replace dot symbol and asterisk symbol to java-based regex pattern
             filter = filter.toLowerCase().replace(Constants.PUNCTUATION_POINT, Constants.PUNCTUATION_SEPARATOR_POINT);
-            if (filter.startsWith(Constants.ANY_VALUE)) {
+            // filter start with [* 、? 、+] will triggering PatternSyntaxException
+            if (filter.startsWith(Constants.ANY_VALUE)
+                || filter.startsWith(Constants.INTERROGATION_POINT) || filter.startsWith(Constants.PLUS_SIGNS)) {
                 filter = Constants.PUNCTUATION_POINT + filter;
             }
-            Pattern regex = Pattern.compile(filter, Pattern.CASE_INSENSITIVE); // search with no case insensitive
+            // search with no case insensitive
+            Pattern regex = Pattern.compile(filter, Pattern.CASE_INSENSITIVE);
             for (String candidate : candidates) {
                 Matcher matcher = regex.matcher(candidate);
                 if (matcher.matches() || matcher.lookingAt()) {