2013-02-15 2 views
0

Мне нужно найти подстроку в предложении «Привет, назовите меня XXX.». Предложение может быть очень длинным, и единственное, что помогает мне определить, что такое имя, - это тот факт, что имя всегда находится в from "call me"+space+name"+dot. Тем не менее, предложение может также выглядеть hello, call me. call me xxx.Найти подстроку с регулярным выражением с java

Call me John. ⇒ John 

Call me Call me John. ⇒ prohibited - confusing 

Call me. Call me John. ⇒ John 

Call me Call me John. ⇒ John 

Call me Peter .Call me John. ⇒ John 

Call me Peter. Call me John. ⇒ prohibited - more then one name... 

Имени может быть любой последовательностью символов, кроме \ г \ п \ 0 и точки.

Я был бы признателен, если бы кто-нибудь мог помочь мне определить регулярное выражение. Я пытаюсь выяснить, в течение более двух часов, но без всякого успеха ...

+3

2-й и 4-й предложения такие же, и вы ожидаете различный выход. Неоднозначность !! – Juvanis

+0

Это только из-за плохого форматирования здесь на stackoverflow ... в четвертом предложении должно быть два пробела после первого «Позвони мне» ... но да ... мой плохой ... Я должен написать это как-то, чтобы сделать его яснее :) – Dworza

+0

Почему 'Call me Call me John.' запрещено? Согласно вашему заявлению о проблеме, это должно быть ОК, а имя - «Позвони мне, Джон». Также почему «Позвони мне, Питер, позвони мне, Джон.» Не запрещено? Есть два совпадения: с именем 'Peter' и именем' John'. В случае, если имя не может содержать пробелы, в чем проблема с 'Call me Call me John.'? Это не сбивает с толку, а имя - «Джон». –

ответ

1

Если предположить, что это имя не может содержать пробелы:

String string = "Call me Peter .Call me John."; 
Matcher matcher = Pattern.compile ("Call me ([^\r\n\0\\. ]+)\\.").matcher (string); 
if (matcher.find()) 
{ 
    String name = matcher.group (1); 
    if (matcher.find()) throw new Exception ("Prohibited: too many matches!"); 
    System.out.println (name); 
} 
else throw new Exception ("Prohibited: no matches!"); 
2

регулярное выражение должно работать для вас:

"(?<=call me)[^.]*" 
+0

Yay! Ты мой герой! :) – Dworza

0

Somethings, как это: .*Call\ me\ (.[\w]+).?

проверить, если он fullfils все ваши требования в Интернете по адресу: http://www.rubular.com/

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