如何在java中对字符之间包含.*的字符串使用.matches

如何在java中对字符之间包含.*的字符串使用.matches,java,regex,string-matching,Java,Regex,String Matching,我想检查str1是否与str2匹配,而不是Alex part 注意-Alex在这里是一个不断变化的角色。可能是汤姆、哈里等 所以我试着: 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. " 但它返回false 我做错了什

我想检查str1是否与str2匹配,而不是Alex part

注意-Alex在这里是一个不断变化的角色。可能是汤姆、哈里等

所以我试着:

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. "
但它返回false

我做错了什么

它与:-

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

您的正则表达式将匹配“I”和“am”之间的两个空格,因此它与字符串不匹配

str2 = "My hobby is playing \"Tennis\". I (.*)
因为那里只有一个空格。而且,你在“网球”之后漏掉了圆点。但是,请注意,“.”在正则表达式中有特殊的含义。所以你想避开正则表达式中的点

尝试:

上述内容将与以下两个方面相匹配:

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

您需要一个能够匹配变化部分的正则表达式。这里的变化部分是带括号的名称。这个部分可能在字符串中,也可能不在字符串中。名称可以是任何英文字母串。因此,您希望匹配
[左括号][任何字母串][右括号]
。让我们为此构建一个正则表达式。两个句子的正则表达式
我擅长它
我喜欢它
都是一样的,所以你只需要复制它。现在:

1。可以有0个或1个开放式括号。0如果您根本没有提到该名称,则为1。这方面的正则表达式是:
[(]?
类似地,对于闭括号,您需要
[)]?

2.
I
之后必须至少有一个空格,在
am
之前必须有一个空格。为此,我们需要
\s+
,但我们需要转义
\
,因此一个或多个空格的正则表达式变成
\\s+
。同样地,在
I
之后和
love
之前各有一个空格

3.然后您需要一个正则表达式来匹配英语的名称/单词。这就是
[a-zA-Z]*

4.最后,上述所有内容可能在句子中,也可能不在句子中,因此我们将上面构建的正则表达式括起来,如下所示
[regex build over]*
。这可以确保带括号的名称也可以不存在

5.您需要退出
\

所以最后,
str2
应该是:

String str2=“我的爱好是打网球”。我[\\s+[(]?[a-zA-Z]*[)]?\\s+]*擅长网球\\。我[\\s+[(]?[a-zA-Z]*[)]?\\s+]*喜欢网球\\/code>

它将匹配以下任何
str1

str1=“我的爱好是打网球”。我(亚历克斯)打得很好。我(亚历克斯)喜欢网球。”

str1=“我的爱好是打网球。我很擅长。我喜欢它。”

如果有帮助,请告诉我。这对我很管用

有用资源:

1.


2.

“我不想使用正则表达式。”
*
就是其中之一。没有它也不行。即使我使用-
String str1=“我的爱好是打网球”。我很擅长。我喜欢它。String str2=“我的爱好是打网球”。我很擅长。我喜欢它。
@zapl-:P…我是说java:D中的regex类…很抱歉,兄弟,在str2中,试着用
\\\\“
@grexter89:那没用。引号符号在我熟悉的任何正则表达式风格中都没有特殊意义——在Java中肯定没有。添加另一个反斜杠不会有什么坏处,但也不会有任何好处。我无法使链接正常工作…请转到并复制regex
我的爱好是打“网球”\。我(?:\(.*)?我很擅长。I(?:\(.*)?喜欢它\。
在第一个文本框中,两个输入字符串在第二个框中。我会的,我明白了。我犯了一个错误。非常感谢。
"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.