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实际上在Javamatches()
方法中匹配整个字符串。因此,使用^
和$
是不必要的
您必须使用如下内容: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));