2015-05-20 2 views
2

Я пытаюсь сгенерировать свой Pattern, чтобы иметь возможность установить/добавить/отредактировать его через JTextfield в UI для варианта2 он работает нормально, но если я попытаюсь добавить более одного рисунка (вариант1), он останавливается работать.Java regex generate pattern

Можете ли вы сказать мне, что я делаю неправильно?

Вот соответствующая часть кода: выход

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

public class TestSomeStaff { 

String getPattern(String s) { 
    String p = ""; 
    for (int i = 0; i < s.length(); i++) { 
     if (Character.isLetter(s.charAt(i))) { 
      p += "\\" + "w"; 
     } else if (Character.isDigit(s.charAt(i))) { 
      p += "\\" + "d"; 
     } else { 
      p += s.charAt(i); 
     } 
    } 
    return p; 
} 

public static void main(String[] args) { 
    String code1 = "11XXX08_XX000XX__XX11"; 
    String code2 = "11XXX08_XX000X__XX11"; 
    TestSomeStaff t = new TestSomeStaff(); 

    // String p="("+t.getPattern(code1) + ") | ("+t.getPattern(code2)+")"; 
    // //variant1 
    String p = t.getPattern(code1); // variant 2 
    System.out.println(t.getPattern(code1)); 
    Pattern pat = Pattern.compile(p); 

    Matcher m = pat.matcher(code1); 
    System.out.println("pattern:" + m.pattern()); 

    if (m.find()) { 
     System.out.println(m.group()); 
    } 
} 
} 

var1: выход

\d\d\w\w\w\d\d_\w\w\d\d\d\w\w__\w\w\d\d 
pattern:(\d\d\w\w\w\d\d_\w\w\d\d\d\w\w__\w\w\d\d) | (\d\d\w\w\w\d\d_\w\w\d\d\d\w__\w\w\d\d) 

var2:

\d\d\w\w\w\d\d_\w\w\d\d\d\w\w__\w\w\d\d 
pattern:\d\d\w\w\w\d\d_\w\w\d\d\d\w\w__\w\w\d\d 
11XXX08_XX000XX__XX11 
+1

Хотя не совсем понятно, что вы собираетесь делать, чтобы соответствовать шаблону, вы должны удалить пробелы в варианте 1: ") | (" – olexd

ответ

1

Пространства в variant1 шаблоне имеют важное значение. Если вы удалите пробел, вариант будет работать.

+0

Я думал, что это имеет значение только внутри скобок, thx – sala

+0

** Все * * в регулярном выражении (Pattern) означает что-то. –