Java 如何在正则表达式中使用插入符号和美元?

Java 如何在正则表达式中使用插入符号和美元?,java,regex,Java,Regex,我正试图学习正则表达式,但我只对我的第一个代码感到惊讶。 我读到在测试开始和结束时分别使用插入符号(^)和美元($)进行匹配。但我很难找出我的代码出了什么问题 public class Test1 { public static void main(String[] args) { // TODO Auto-generated method stub String letterA="cat will die";

我正试图学习正则表达式,但我只对我的第一个代码感到惊讶。 我读到在测试开始和结束时分别使用插入符号(^)和美元($)进行匹配。但我很难找出我的代码出了什么问题

  public class Test1 {

        public static void main(String[] args) {
            // TODO Auto-generated method stub
            String letterA="cat will die";
            String pattern="[^cat]";
            System.out.println(letterA.matches(pattern));
            String pattern1="^(cat)";
            System.out.println(letterA.matches(pattern1));
            String letterB="Lending your cat";
            String pattern3="[cat$]";
            System.out.println(letterB.matches(pattern3));
            String pattern4="cat$";
            System.out.println(letterB.matches(pattern4));
        }

    }

每个系统都给我输出
false
读取
字符串上的文档。匹配
。表达式必须完全匹配。例如,尝试模式
*cat.*


另外,
[]
中使用的
^
表示否定,因此
[^cat]
读取正则表达式引擎-“不是c、或a或t”。不确定您是否知道,所以以防万一…

请阅读
String.matches上的文档。表达式必须完全匹配。例如,尝试模式
*cat.*


另外,
[]
中使用的
^
表示否定,因此
[^cat]
读取正则表达式引擎-“不是c、或a或t”。不确定您是否知道,所以以防万一…

实际上在Java中
matches()
方法匹配整个字符串。因此,使用
^
$
是不必要的

您必须使用如下内容:
letta.matches(“cat.*”)
来匹配与
“cat”
对齐的字符串

边界匹配器:匹配由
“\\b”

示例字符串:“卡特彼勒会死”

letter.matches(“cat.*)
//将返回true


letterA.matches(“\\bcat\\b.*)
//将返回false

实际上在Java
matches()
方法中匹配整个字符串。因此,使用
^
$
是不必要的

您必须使用如下内容:
letta.matches(“cat.*”)
来匹配与
“cat”
对齐的字符串

边界匹配器:匹配由
“\\b”

示例字符串:“卡特彼勒会死”

letter.matches(“cat.*)
//将返回true


letterA.matches(“\\bcat\\b.*)
//将返回false

,这是一个使用正则表达式进行部分匹配的示例

import java.io.Console;
import java.util.regex.Pattern;
import java.util.regex.Matcher;


public class HelloWorld{

     public static void main(String []args){
        Console console = System.console();
        String letterA="cat will die";

            String spattern=".*cat.*";
            System.out.println(letterA.matches(spattern));

            Pattern pattern = 
            Pattern.compile(console.readLine("%nEnter your regex: "));
            Matcher matcher = 
            pattern.matcher(console.readLine("Enter input string to search: "));

            System.out.println(matcher.find());
     }
}

也就是说,eample使用正则表达式进行部分匹配

import java.io.Console;
import java.util.regex.Pattern;
import java.util.regex.Matcher;


public class HelloWorld{

     public static void main(String []args){
        Console console = System.console();
        String letterA="cat will die";

            String spattern=".*cat.*";
            System.out.println(letterA.matches(spattern));

            Pattern pattern = 
            Pattern.compile(console.readLine("%nEnter your regex: "));
            Matcher matcher = 
            pattern.matcher(console.readLine("Enter input string to search: "));

            System.out.println(matcher.find());
     }
}
插入符号和美元只是告诉您的模式是否应该查找行的开始(插入符号)和结束(美元)

此外,在方括号内,此语法已更改。如果以[^…]开头,则表示否定,即尝试匹配任何不在插入符号后面的字符。括号内的$告诉引擎您正在寻找与$char匹配的字符

此外,java中的匹配仅在匹配整个字符串时返回true

考虑到这一点,让我们通过每个案例,看看为什么它们不匹配:


此正则表达式正在查找不是“c”或“a”或“t”的单个字符。像“f”这样的字符串对于这个字符串将返回true


()是,它们在匹配的情况下不起任何作用。
^只告诉您将在字符串开头查找匹配项,并且您的正则表达式正在尝试匹配字符串“cat”。对于这种情况,这是唯一可能返回true的匹配


这只是尝试匹配单个字符字符串,这些字符串可以是“c”或“a”或“t”或“$”

最后:

String pattern4="cat$";
只是试图精确匹配字符串“cat”(锚定到末尾,但实际上没有什么区别)

因此,回到您的问题,您需要使用类似于.*运算符的东西来匹配任意数量的字符,例如:

  • ^cat.*$
    (如果需要以cat开头的字符串)
  • ^.*cat$
    (如果需要以cat结尾的字符串)
  • ^.*cat.*$
    (如果您想要任何包含文本cat的字符串)
  • 插入符号和美元只是告诉您的模式是否应该查找行的开始(插入符号)和结束(美元)

    此外,在方括号内,此语法已更改。如果以[^…]开头,则表示否定,即尝试匹配任何不在插入符号后面的字符。括号内的$告诉引擎您正在寻找与$char匹配的字符

    此外,java中的匹配仅在匹配整个字符串时返回true

    考虑到这一点,让我们通过每个案例,看看为什么它们不匹配:


    此正则表达式正在查找不是“c”或“a”或“t”的单个字符。像“f”这样的字符串对于这个字符串将返回true


    ()是,它们在匹配的情况下不起任何作用。
    ^只告诉您将在字符串开头查找匹配项,并且您的正则表达式正在尝试匹配字符串“cat”。对于这种情况,这是唯一可能返回true的匹配


    这只是尝试匹配单个字符字符串,这些字符串可以是“c”或“a”或“t”或“$”

    最后:

    String pattern4="cat$";
    
    只是试图精确匹配字符串“cat”(锚定到末尾,但实际上没有什么区别)

    因此,回到您的问题,您需要使用类似于.*运算符的东西来匹配任意数量的字符,例如:

    • ^cat.*$
      (如果需要以cat开头的字符串)
    • ^.*cat$
      (如果需要以cat结尾的字符串)
    • ^.*cat.*$
      (如果您想要任何包含文本cat的字符串)

    根据java文档

    public boolean matches()
    尝试将整个区域与 模式

    如果匹配成功,则可以通过 开始、结束和分组方法

    返回:
    true
    当且仅当整个区域序列匹配此匹配器的模式时

    既然每个人都提到了你的正则表达式的缺陷。我不会写这件事。但让我来谈谈插入符号(^)和美元($)

    阅读^$和^

  • ^
    如果行有行的开头,则字面上匹配。 `实际上,说话毫无意义!为什么每一个林
    String pattern4="cat$";
    
    String letterA="";//i'm not writing anything because matches attempt to match entire region
            String pattern="^";
            System.out.println(letterA.matches(pattern));
    
    String letterA="";
            String pattern="$";
            System.out.println(letterA.matches(pattern));