[英]How to use .matches for string containing .* in between characters in java
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匹配。
注意 - 亞歷克斯是一個變化的部分。 可能是湯姆,哈里等。
所以我試過: -
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 (.*)
你的正則表達式將匹配“I”和“am”之間的兩個空格,因此它不匹配字符串
"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 am good at it. I love it.
My hobby is playing "Tennis". I (Alex) am good at it. I (Alex) love it.
你需要一個可以匹配不同部分的正則表達式。 這里的變化部分是帶括號的名稱。 該部分可能在字符串中,也可能不存在。 名稱,可以是任何英文字母字符串。 所以你想匹配[open-bracket][any string of alphabets][close bracket]
。 讓我們為此構建一個正則表達式。 兩個句子的正則表達式I am good at it
並且I 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."
如果有幫助,請告訴我。 它對我有用..
有用的資源:
1. http://www.tutorialspoint.com/java/java_regular_expressions.htm
2. http://www.tutorialspoint.com/java/java_string_matches.htm
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.