2013-12-18 28 views
0
String str1 = "My hobby is playing \"Tennis\" I am good at it. I love it." 
String str2 = "My hobby is playing \"Tennis\". I (Alex) am good at it. I(Alex) love it. " 

我想檢查str1是否與除Alex部分以外的str2匹配。如何使用.matches字符串中包含。*之間的字符在java中

注 - 亞歷克斯在這裏是一個不斷變化的部分。這可能是湯姆,HARY等

所以,我想: -

str2 = "My hobby is playing \"Tennis\". I (.*) am good at it. I(.*) love it. " 
str1.matches(str2) 

但它返回false。

我在這裏做錯了什麼?

它適用於: -

str2 = "My hobby is playing \"Tennis\". I (.*) 
+0

「我寧願不使用正則表達式。」 '。*'*是*一個。 – zapl

+0

沒有這個功能也無法正常工作。即使我用 - String str1 =「我的愛好是在玩」Tennis「,我擅長它,我喜歡它。String str2 =」我的愛好是玩「網球」。我很擅長這個。我*。愛它。' – anujin

+0

@zapl - :P ...我的意思是在java中的正則表達式類:D ...抱歉錯誤溝通兄弟。在str2中的 – anujin

回答

1

你的正則表達式匹配之間的「我」和「我」兩個白色的空間,所以它不會匹配字符串

"My hobby is playing \"Tennis\" I am good at it. I love it." 

Becasue只有一個空格那裏。此外,你錯過了「網球」之後的點。但是,請注意「。」在正則表達式中有特殊的含義。所以,你想逃避點在您的正則

嘗試:

"My hobby is playing \"Tennis\"\\. I (?:\\(.*\\))?am good at it\\. I (?:\\(.*\\))?love it\\." 

以上將同時匹配:

My hobby is playing "Tennis". I am good at it. I love it. 
My hobby is playing "Tennis". I (Alex) am good at it. I (Alex) love it. 
+0

莫名其妙地不爲我工作:( – anujin

+1

我無法得到鏈接工作....去http://regexpal.com/和複製正則表達式'我的愛好是玩「網球」\。我(?:\ (。* \))?善於處理\。我(?:\(。* \))?愛它在第一個文本框和第二個框中的兩個輸入字符串,它將匹配 –

1

你需要一個正則表達式,可以匹配不同的部分。這裏的變化部分是帶括號的名稱。這部分可能會或可能不會在字符串中。名稱可以是任何字符串的英文字母。所以你想匹配[open-bracket][any string of alphabets][close bracket]。讓我們爲此構建一個正則表達式。這兩個句子I am good at itI love it的正則表達式都是相同的,所以你只需要複製它。現在:

1.可以有0個或1個左括號。 0,如果你根本沒有提到這個名字,那麼1。正則表達式爲:[(]?類似地,對於緊密括號,您需要[)]?

2.必須有空白後至少1 I和一個am之前。爲此,我們需要\s+,但我們需要跳過\,因此一個或多個空格的正則表達式變爲\\s+。同樣,I之後的一個空間和love之前的一個空間。

3.然後你需要一個正則表達式來匹配英語的名字/單詞。那簡直就是[a-zA-Z]*

4.最後,所有以上可能會或可能不會出現在句子中,所以我們附上我們上面建立的正則表達式,像這樣[regex-built-above]*。這確保了帶括號的名稱也可以不存在。

5.您需要轉義.\

所以最後,str2應該是:

String str2 = "My hobby is playing \"Tennis\"\\. I[\\s+[(]?[a-zA-Z]*[)]?\\s+]* am good at it\\. I[\\s+[(]?[a-zA-Z]*[)]?\\s+]* love it\\."

這將匹配任何下列str1

str1 = "My hobby is playing \"Tennis\". I (Alex) am good at it. I (Alex) love it."

str1 = "My hobby is playing \"Tennis\". I am good at it. I love it."

讓我知道它是否有幫助。它的工作對我來說..

有用的資源:

http://www.tutorialspoint.com/java/java_regular_expressions.htm

2.http://www.tutorialspoint.com/java/java_string_matches.htm

+0

I知道了,我犯了一個錯誤,謝謝你。 – anujin

相關問題