[英]Why is this String not matching this regex?
我有以下代碼:
public class testMatch {
public static void main(String[] args) {
String dummyMessage = "asdfasdfsadfsadfasdf 3 sdfasdfasdfasdf";
String expression = "3";
if (dummyMessage.matches(expression)){
System.out.println("MATCH!");
} else {
System.out.println("NO MATCH!");
}
}
}
我希望這是一個成功的匹配,因為dummyMessage包含表達式3,但是當我運行這個代碼片段時,代碼打印NO MATCH!
我不知道我做錯了什么。
好的停止吶喊! 。* 3. * works這是我在一些實時代碼中的問題的過度簡化,正則表達式是可配置的,直到現在匹配整個字符串已經沒事了,我現在必須匹配字符串的一部分並且想知道它為什么不起作用。
它匹配整個字符串,即大多數其他正則表達式實現中的^3$
。 所以3
不匹配,例如333
或你的字符串。 但是.*3.*
會做的。
但是,如果您只想測試字符串中是否包含“3”,則根本不需要正則表達式。 請改用dummyMessage.contains(expression)
。
String#matches(regex)判斷此字符串是否與給定的正則表達式匹配。 你的字符串dummyMessage與表達式不匹配,因為它試圖檢查dummyMessage是否為3你可能需要String.contains(charseq) 。
String dummyMessage = "asdfasdfsadfsadfasdf 3 sdfasdfasdfasdf";
String expression = "3";
if (dummyMessage.contains(expression)){
System.out.println("MATCH!");
} else {
System.out.println("NO MATCH!");
}
您應該將整個字符串匹配matches
返回true。 也許嘗試使用.*3.*
。
它將匹配這樣的正則表達式: .*3.*
使用contains(表達式)
String dummyMessage = "asdfasdfsadfsadfasdf 3 sdfasdfasdfasdf";
String expression = "3";
if (dummyMessage.contains(expression)) {
System.out.println("MATCH!");
} else {
System.out.println("NO MATCH!");
}
默認情況下, String#matches()
測試string是否完全匹配正則表達式。 使它工作替換
expression = "3"
同
expression = ".*3.*"
要匹配字符串中的子字符串,請使用Matcher#find()
方法。
你的正則表達應該是.*3.*
String類的matches()方法檢查整個字符串是否匹配。 我將您的代碼修改為:
public class testMatch
{
public static void main(String[] args)
{
String dummyMessage = "asdfasdfsadfsadfasdf 3 sdfasdfasdfasdf";
String expression = ".*3.*";
if (dummyMessage.matches(expression))
{
System.out.println("MATCH!");
}
else
{
System.out.println("NO MATCH!");
}
}
}
它現在有效
您可能正在尋找matcher.find
:
String message = "asdfasdfsadfsadfasdf 3 sdfasdf3asdfasdf";
String expression = "3";
// Really only need to do this once.
Pattern pattern = Pattern.compile(expression);
// Do this once for each message.
Matcher matcher = pattern.matcher(message);
if (matcher.find()) {
do {
System.out.println("MATCH! At " + matcher.start() + "-" + matcher.end());
} while ( matcher.find() );
} else {
System.out.println("NO MATCH!");
}
相應地更改原始正則表達式 - 它當前不正確且不匹配:
String expression = "(.*)3(.*)";
或者只使用String.contains() - 我認為這更適合這種情況。
要么那樣做:
String dummyMessage = "asdfasdfsadfsadfasdf 3 sdfasdfasdfasdf";
String expression = "3";
Pattern p = Pattern.compile(".*3.*");
Matcher m = p.matcher(dummyMessage);
boolean b = m.matches();
if (b) {
System.out.println("MATCH!");
}
else {
System.out.println("NO MATCH!");
}
或者這樣:
String dummyMessage = "asdfasdfsadfadfasdf 3 sdfasdfasdfasdf";
String expression = "3"
if (dummyMessage.contains(expression)) {
System.out.println("MATCH!");
}
else {
System.out.println("NO MATCH!");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.