如何在Java中使用正则表达式进行模式匹配?

如何在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

我已经在线阅读了文档和各种教程,但我仍然对正则表达式在Java中的工作方式感到困惑。我要做的是创建一个函数,它接受string类型的参数。然后我想检查传递的字符串是否包含除 mdclxvivxlcdm。例如,字符串“XMLVID”应该返回false,“ABXMLVA”应该返回true

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]