2017-01-28 10 views
0

Я должен создать регулярное выражение для соответствия содержимому одного файла, но у меня есть одна проблема. В этом файле я контролирую, что есть, для каждой строки, то эта инструкция:Regex для соответствия текстовому файлу

я = число J = число к = число и = число

Но сложность в том, что я должен соответствовать правильно также

J = число я = число и = число к = число

и любое расположение I, J, K и U. Как создать одно регулярное выражение для всех случаев? Обратите внимание, что в одной строке не может быть никакого ripetition i, j, k, u. Спасибо.

+2

Что не работает с вашими попытками? – Toto

ответ

1

Что вы ищете называется классы символов:

[ijku]=number [ijku]=number [ijku]=number [ijku]=number 
+2

он по-прежнему соответствует 'i = номер i = номер' ... и т. Д. – TheLostMind

+0

Да:/это не очень хорошее решение для меня. – Antonio1996

+0

Вы должны уточнить, будет ли это использоваться для проверки или соответствия только. @ Antonio1996 – revo

3

(([ijku]=)(?!.*\\2)number(?:\\s(?=\\w)|$)){4} будет работать для вас. Это также обрабатывает случай повторения.

public static void main(String[] args){ 
    String s = "i=number j=number k=number u=number"; 
    System.out.println(s.matches("(([ijku]=)(?!.*\\2)number(?:\\s(?=\\w)|$)){4}")); 
    s = "u=number j=number k=number i=number"; 
    System.out.println(s.matches("(([ijku]=)(?!.*\\2)number(?:\\s(?=\\w)|$)){4}")); 
    s = "u=number j=number k=number u=number"; 
    System.out.println(s.matches("(([ijku]=)(?!.*\\2)number(?:\\s(?=\\w)|$)){4}")); 
} 

O/P:

true 
true 
false 
+1

Спасибо;) Но я не понимаю этого: (?!. * \\ 2). Что это? Вы можете мне объяснить? Спасибо – Antonio1996

+1

@ Antonio1996 Это [обратная ссылка] (http://www.regular-expressions.info/backref.html) во вторую [группу захвата] (http://www.regular-expressions.info/brackets.html) для проверки отрицательным [lookahead] (http://www.regular-expressions.info/lookaround.html) нет 'i =' ... 'i =' ... Вы также можете потребовать разделяющее пространство на например, regex like: ['(?: (?: ([ijku]) (?!. *? \ 1 =) = number)) {3} [ijku] = number'] (http://fiddle.re/ kpxdan) –

+0

@ Antonio1996 - Да, как * bobble * говорит, '\\ 2' означает, что его * обратная ссылка * во вторую захваченную группу, то есть значение между'() 's. Что используется для проверки наличия дубликата ' =' в строке – TheLostMind