2013-02-15 166 views
0

我需要在句子「Hello,call me XXX。」中找到一個子字符串。這句話可能很長,唯一能幫助我確定名字的是,名字總是在fromat "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... 

名稱可以是除\ r,\ n,\ 0,點字符的任意序列。

我將不勝感激如果有人能幫我定義正則表達式。 我試圖找出了兩個多小時,但沒有任何成功...

+3

第2個和第4個句子是一樣的,你期望不同的輸出。歧義! – Juvanis 2013-02-15 13:17:36

+0

這只是因爲在這裏stackoverflow格式不好...在第四句話應該有第一個「打電話給我」後兩個空格...但是啊...我的壞..我應該寫它以某種方式使其更清晰:) – Dworza 2013-02-15 13:20:46

+0

爲什麼叫我叫我John.'被禁止?根據你的問題陳述,它應該沒問題,名字叫'叫我約翰'。另外爲什麼'叫我彼得。給我約翰。'是不被禁止的?有兩個匹配項:名字叫'彼得',名字叫'約翰'。如果名稱不能包含空格,「Call me Call me John John」的問題是什麼?這不是混淆,名字是'約翰'。 – 2013-02-15 13:20:50

回答

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

耶!你是我的英雄! :) – Dworza 2013-02-15 13:27:57

相關問題