如何在Java中使用正则表达式进行模式匹配?
我已经在线阅读了文档和各种教程,但我仍然对正则表达式在Java中的工作方式感到困惑。我要做的是创建一个函数,它接受string类型的参数。然后我想检查传递的字符串是否包含除 mdclxvivxlcdm。例如,字符串“XMLVID”应该返回false,“ABXMLVA”应该返回true如何在Java中使用正则表达式进行模式匹配?,java,regex,string,string-matching,Java,Regex,String,String Matching,我已经在线阅读了文档和各种教程,但我仍然对正则表达式在Java中的工作方式感到困惑。我要做的是创建一个函数,它接受string类型的参数。然后我想检查传递的字符串是否包含除 mdclxvivxlcdm。例如,字符串“XMLVID”应该返回false,“ABXMLVA”应该返回true public boolean checkString(String arg) { Pattern p = Pattern.complile("[a-zA-z]&&[^MDCLXVIivxl
public boolean checkString(String arg)
{
Pattern p = Pattern.complile("[a-zA-z]&&[^MDCLXVIivxlcdm]");
Matcher m = p.matcher(arg);
if(m.matches())
return true;
else
return false;
}
当我通过时,“XMLIVD”、“ABXMLVA”和“XMLABCIX”都返回false。我做错了什么?非常感谢您的帮助。您需要在字符类中使用交集运算符,否则它会与&
匹配。顺便说一句,从A
到(小写)z
的第一个字符类还包括[\]^
,这是您当然不想要的;你把“Patter.complile”拼错了
而且
尝试根据图案匹配整个区域
因此,您需要使用find()
,或者使用*
填充表达式
public boolean checkString(String arg) {
return Pattern.compile("[[a-zA-Z]&&[^MDCLXVIivxlcdm]]").matcher(arg).find();
}
您可以使用这样一个带有两个参数的函数,即
要检查的原始字符串origingalString
要搜索的字符串searchString
public boolean checkCompletelyExist(String origingalString,String searchString){
boolean found = false;
String regex = "";
try{
for(int i = 0; i < searchString.length();i++){
String temp = String.valueOf(searchString.charAt(i));
regex = "[\\x20-\\x7E]*"+"["+temp.toLowerCase()+"|"+temp.toUpperCase()+"]+[\\x20-\\x7E]*";
if(!origingalString.matches(regex)){
found = true;
break;
}
}
System.out.println("other character present : "+found);
} catch (Exception e) {
e.printStackTrace();
}
return found;
}
public boolean checkcompleteyexist(String origingalString,String searchString){
布尔值=false;
字符串regex=“”;
试试{
对于(int i=0;i
例如:
checkcompletlyexist(“mdclxvivxlcdm”、“XMLVID”)
输出将是存在的其他字符:false
及
checkcompleteyexist(“mdclxvivxlcdm”、“ABXMLVA”)
输出将是其他字符:true
(RegEx/RegExp)基本上,正则表达式是描述一定数量文本的模式
^abc$字符串的开始/结束
\b\b单词,而不是单词边界
\w\d\s字、数字、空格
\W\D\S不是字、数字、空格
\z-整个字符串的结尾
(…)-分组(捕获组)
[abc]a、b或c中的任何一种
[^abc]不是a、b或c
[a-g]a和g之间的字符
{m,n}-表示“从m到n重复”的量词
+-一个或多个重复的量词(即,{1,})
? - 0或1重复的量词(即,{0,1})
POSIX括号表达式是一种特殊的字符类。POSIX括号表达式匹配一组字符中的一个字符,就像常规字符类一样。POSIX字符类名称必须全部用小写字母书写。POSIX标准定义了12个字符类。下表列出了所有12个类,以及一些正则表达式风格也支持的[:ascii://code>和[:word://code>类
模式匹配正则表达式:
final Pattern mix_alphaNumaric_pattern = Pattern.compile("^[A-Za-z0-9]+$");
final Pattern alphabets_pattern = Pattern.compile("^[A-Za-z,\\- ]+$");
final Pattern alphabetsNull_pattern = Pattern.compile("|^[A-Za-z,\\- ]+$");
final Pattern numaric_pattern = Pattern.compile("^[0-9]+$"); // ^begning +followed By $end
final Pattern date_time_pattern = Pattern.compile("\\d{1,2}/\\d{1,2}/\\d{4}\\s\\d{1,2}\\:\\d{1,2}");
final Pattern weather_pattern = Pattern.compile("[\\-]*\\d{1,3}\\.\\d{1,6}");
final Pattern email_pattern = Pattern.compile("^[\\w-_\\.+]*[\\w-_\\.]\\@([\\w]+\\.)+[\\w]+[\\w]$");
final Pattern mobile_pattern = Pattern.compile("(\\+)?(\\d{1,2})?\\d{10}");
public static void main(String[] args) {
String[] str = {"MCDL", "XMLIVD", "ABXMLVA", "XMLABCIX"};
Pattern p = Pattern.compile("^(M|D|C|L|X|V|I|i|v|x|l|c|d|m)+$");
// Returns: true if, and only if, the entire region sequence matches this matcher's pattern
for (String sequence : str ) {
boolean match = false, find = false;
if ( !p.matcher(sequence).matches() ) match = true;
if (p.matcher(sequence).find()) find = true;
System.out.format("%s \t Match[%s] Find[%s]\n", sequence, match, find);
}
}
输出:
@请参阅以下链接:
我试过这个,但结果是一样的。当我通过“XMLIVD”、“ABXMLVA”和“XMLABCIX”时,都返回false。但它应该返回false,true,true。谢谢你发现这个方法有效。因此,我也可以这样做[[.]a-zA-Z.*&&&[^mdclxvivxlcdm]]?不,我是说Pattern.compile(.[[a-zA-Z]&&&-[^mdclxvivxlcdm].])。matcher(arg.matches()代码>如果您使用eclipse ctrl+I进行缩进,请使用某种方法。没有时间进行绘制。如果您想要解决方案,请从中获得并使用urslf.:)。谢谢你提供的链接。不,你可以也应该在StackOverflow做缩进。如果eclipse自动缩进您的代码,请发布。无需手动插入
s任何位置好的,先生,我将。。我对这里完全陌生。。谢谢你的建议。。下一次我会关心的,
MCDL Match[false] Find[true]
XMLIVD Match[false] Find[true]
ABXMLVA Match[true] Find[false]
XMLABCIX Match[true] Find[false]