2015-03-15 5 views
1

Я хочу, чтобы регулярное выражение проверяло, есть ли «слово» ([a-zA-Z0-9]), и если есть скобка, должно быть что-то вроде (id = [0- 9] +), после чего одно из этих шести «отношений» следует за другим словом. Должно быть по крайней мере одно пробел между словами и отношением. Между словами и отношением и между (,), id, = и числом может быть больше пробелов. Три строки находятся там, чтобы сократить линии.Строка не соответствует регулярному выражению

Этот код всегда печатает ложь независимо от того, что я пытаюсь:

String first = "\\s[a-zA-Z0-9]+(\\s\\(\\sid\\s=\\s[0-9]+\\s\\))?\\s+"; 
String second = "(contains|contained-in|part-of|has-part|successor-of|predecessor-of)\\s+"; 
String third = "[a-zA-Z0-9]+(\\s\\(\\sid\\s=\\s[0-9]+\\s\\))?\\s"; 
Pattern linePattern = Pattern.compile(first + second + third); 

public static void main(String[] args) { 
    String a = "apple(id=107) contained-in tree"; 
    Matcher matcher = linePattern.matcher(a); 
    boolean matches = matcher.matches(); 
    System.out.println(matches); 
} 
+0

ах и я знаю, что я должен объявить их статическими. Я сделал это в своем фактическом коде, но это просто, чтобы было легче читать. :) – AoEAfro

+0

Ваш шаблон начинается с '\\ s', пока ваш пример не начинается с пробела. –

+0

и как я могу написать его так, чтобы он принимал, если есть пустое пространство до бесконечности? – AoEAfro

ответ

0

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

\s*[a-zA-Z0-9]+(\s*\(\s*id\s*=\s*[0-9]+\s*\))?\s*(contains|contained-in|part-of|has-part|successor-of|predecessor-of)\s+[a-zA-Z0-9]+(\s*\(\s*id\s*=\s*[0-9]+\s*\))?\s*

Pattern linePattern = Pattern.compile("\\s*[a-zA-Z0-9]+(\\s*\(\\s*id\\s*=\\s*[0-9]+\\s*\\))?\\s*(contains|contained-in|part-of|has-part|successor-of|predecessor-of)\\s+[a-zA-Z0-9]+(\\s*\\(\\s*id\\s*=\\s*[0-9]+\\s*\\))?\\s*"); 
+0

Не может ли это сделать ряд OR'd регулярных выражений? – beresfordt

+0

@beresfordt: Да, я был слишком быстр. Я обновил шаблон регулярного выражения. –

+0

это сделал. Огромное спасибо. :) – AoEAfro

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