2013-04-24 3 views
1

Я не программист, поэтому мой уровень является новым в этом поле. Я должен создать регулярное выражение для проверки двух строк. Между этими двумя линиями А и В может быть одна, две или несколько разных линий.Использование java.util.regex.Pattern

Я просматривал ссылку http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html, но я не дошел до решения, во-первых, я думаю, что я очень близко к решению.

Я тестирую выражение ^(.*$) , и это получает целую строку. Если я напишу это выражение дважды, он получит две строки. Таким образом, кажется, что это выражение получает целые строки, такие как вхождения выражения.

Но я хотел бы проверить неопределенные строки между A и B. Я знаю, что по крайней мере это будет одна строка Если я пишу ^(.*$){1,}, он не работает.

Кто-нибудь знает, что может быть ошибкой?

Спасибо за ваше время Andres

+0

Regexes - это то, что вам нужно. – ErrorNotFoundException

ответ

1

DOT . в регулярном выражении соответствует любому символу, кроме символа новой строки.

Вы ищете DOTALL или s флаг, который делает точку совпадением с любым персонажем, включая символ новой строки. Так что если вы хотите, чтобы соответствовать все линии между литералов A and B затем использовать это регулярное выражение:

(?s)A.*?B 

(?s) для DOTALL, что сделает .*? все символы, включая символы новой строки между A и B.

? является сделать над regex неживым.

Подробнее: http://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html

+0

Спасибо !, вот что я искал – Andriu

+0

Добро пожаловать, рад, что все получилось. – anubhava

0

Почему бы вам не использовать сканер? Это может быть в большей степени связаны с тем, что вы хотите:

Scanner sc = new ... 
while (sc.nextLine().compareTo(strB)!=0) { 
whatYouWantToDo 
} 
+0

Привет, это внутри java.util.regex Class Pattern ?. Я думаю, что «мое» приложение, которое проверит шаблон, будет понимать только регулярные выражения, основанные на этом классе java. – Andriu

0

Вы могли бы попытаться найти терминаторов линии \r и \n. В зависимости от источника файла вам, возможно, придется немного поэкспериментировать. Насколько я понял, вы хотите совместить линии, по крайней мере, с одной пустой линией между ними? Попробуйте ^(.*)$\n{2,}^(.*)$

0

Если вы хотите, чтобы найти две одинаковые строки, используя регулярные выражения:

Pattern pattern = Pattern.compile("^(?:.*\n)*(.*\n)(?:.*\n)*\\1"); 
// Skip some lines, find a line, skip some lines, find the first group `(...)` 
Matcher m = pattern.matcher(text); 
while (m.find()) { 
    System.out.println("Double: " + m.group(1); 
} 

(?: ...) не является захват группы; то есть недоступно через m.group(#).

Однако это не будет найти строку B в: «A \ nB \ nA \ nB \ n».

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