2016-08-02 2 views
0

Некоторые из моих строк могут содержать подстроку, которая выглядит как @[alph4Num3ric-alph4Num3ric], где я найду идентификатор альфа-номера и заменим его соответствующим текстовым значением, сопоставленным с соответствующим ключом на карте.Преобразование этого шаблона в регулярное выражение для Pattern.matches (..)

Мой первый наклон должен был проверить, если мой string.contains("@["), но я хочу, чтобы быть более конкретным

так что теперь я смотрю на Pattern.matches(, но я уверен в регулярных выражениях и суммарном выражении

как бы я регулярное выражение для @ [...... - ....] в методе Pattern.matches, он должен также учитывать тире. Поэтому я не уверен, что нужно избегать в этом синтаксисе или подстановочных знаках, или больше.

Я также не уверен на 100%, если это лучшее сообщение. Я хочу сначала получить логическое значение из Pattern.matches, а затем получить реальное значение и изменить строку с этими значениями, что кажется достаточно хорошим, но я хочу минимизировать вычисления.

+3

Звучит как план. Можете ли вы поделиться своими попытками? –

+0

Ничего себе, репутация почти 10K; и все же вы публикуете вопрос, просто дающий требования; без отображения кода ... – GhostCat

+0

@ WiktorStribiżew Что вы думаете о подходе? – CQM

ответ

1

Plese попробовать это,

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class Test { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     String expression = "String contains @[alph4Num3ric-alph4Num3ric] as substring"; 

     Pattern pattern = Pattern 
       .compile("\\@\\[([a-zA-Z0-9]+)-([a-zA-Z0-9]+)\\]"); 
     Matcher matcher = pattern.matcher(expression); 
     while (matcher.find()) { 
      System.out.println("matched: "+matcher.group()); 
      System.out.println("group1: "+matcher.group(1)); 
      System.out.println("group2: "+matcher.group(2)); 
      System.out 
        .println("after replace "+expression.replace(matcher.group(1), "customkey")); 
     } 
    } 

} 

выход:

matched: @[alph4Num3ric-alph4Num3ric] 
group1: alph4Num3ric 
group2: alph4Num3ric 
after replace: String contains @[customkey-customkey] as substring 
+1

Почему вы избегаете '@'? –

+0

В обоих случаях это работает, вы можете удалить escape до @, обычно я не беру шансы на специальные символы :) – Aditya

+0

Там может быть несколько тире, так что есть способ, который я могу просто сопоставить для существования просто @ [.. ...]? В некоторых процессорах regex я использую \ w +, но я чувствую, что это терпит неудачу из-за разнообразия символов. Я буду заменять @ [] тоже – CQM

1

Попробуйте использовать это:

/@[(a-zA-Z0-9-)+]/ 

Я не дал ему попробовать, но надеюсь, что это поможет. Также, если он возвращает ошибку, добавьте обратную косую черту между 9 и - например./@ [(A-Za-Z0-9 -) +]/

+0

Может быть несколько тире, так что есть способ, которым я могу просто сопоставлять существование только @ [ .....]?В некоторых regex-процессорах я использую '\ w +', но я чувствую, что это терпит неудачу из-за множества символов. – CQM

+0

Может быть так/@ [(a-zA-Z0-9 -) +]/ также, если он возвращается ошибка затем добавляет обратную косую черту между 9 и - например/@ [(a-zA-Z0-9 \ -) ​​+]/ –

+0

Это не ответ, это комментарий. –

Смежные вопросы