Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何定义正则表达式格式?_Java_Android_Regex - Fatal编程技术网

Java 如何定义正则表达式格式?

Java 如何定义正则表达式格式?,java,android,regex,Java,Android,Regex,我有一个十进制数,s,需要满足以下条件: ((s>=97 && s<=122 )&&(s>=65 && s<=90)&&(s>=48 && s<=57)&& ((s>=33 && s<=47)||(s>=58 && s<=64)||(s>=91 && s<=96)||(s>=1

我有一个十进制数,
s
,需要满足以下条件:

((s>=97 && s<=122 )&&(s>=65 && s<=90)&&(s>=48 && s<=57)&&
((s>=33 && s<=47)||(s>=58 && s<=64)||(s>=91 && s<=96)||(s>=123 && s<=126))){

((s>=97&&s=65&&s=48&&s=33&&s=58&&s=91&&s=123&&s)是的,你可以。但是你不应该。上面的条件是数字操作,如果你把它们作为数字操作保存,那么它们将是类型安全、快速和易于理解的

您列出的条件可以归结为以下几点:

if (s >= 33 && s <= 126) {
    switch ((int)s) {    
        case 47:
        case 57:
        case 64:
        case 90:
        case 97:
        case 122:
            return s == (int)s;
        default: 
            return true;    
    }
}
return false;
以上是执行此操作的“正确”方法。如果您必须使用正则表达式,您可以通过以下操作:

String pattern = "([459]7|64|90|122)\\.[0-9]+";
return s >= 33 && s <= 126 && !s.toString().matches(pattern);
String pattern=“([459]7 | 64 | 90 | 122)\\\[0-9]+”;

如果需要将大量条件范围解析为正则表达式类,则返回s>=33&&s 没有重叠,这样的实用程序可以工作。不确定是否要嵌入
实用程序代码或仅字符类结果

不幸的是,我不是Java专家。所以这个实用程序是用Perl编写的。也许你
可以将其转换为Java或仅使用它生成一个类

这是一个ASCII示例,它只需要一个大的条件,并根据连续的数字范围(本例中为0-255)对其进行测试,生成一个字符串
基于字符代码,然后将字符串向下操纵为有效的字符类

编辑:需要两个分隔符字符;$pad和$range,它们应该在条件中有效的范围之外

祝你好运

$class = '';
$valid = 0;
$pad   = "\x{100}";
$range = "\x{101}";

for $s (0 .. 255)
{
   if (   ($s >= 33  && $s <= 47)
       || ($s >= 58  && $s <= 64)
       || ($s >= 91  && $s <= 96)
       || ($s >= 123 && $s <= 140)
       || ($s >  4   && $s <  25)
       || ($s >  180)
       || ($s == 0)
  )
   {
      $class .= chr($s);
      $valid = 1;
      # print $s,"\n";
   }
   else {
      $class .= $pad;
   }
}

if ( $valid)
{
   # Escape special class characters
      $class =~ s/([\[\]\-\^\\])/\\$1/g;

   # Compact range, insert delimiter, then remove padding
      $class =~ s/(\\?[^$pad])[^$pad]+(\\?[^$pad])/$1$range$2/g;
      $class =~ s/[$pad]//g;

   # Convert non-printable ASCII characters to hex (does not process delimeter)
      $class =  join '', 
              map { my $v = ord($_);
                    $v != ord($range) && ($v < 32 || ($v > 126 && $v < 256)) ?
                    sprintf("\\x%.2x", $v) : $_
              } split (//, $class);

   # Insert range operator's
      $class =~ s/[$range]/-/g;

   # Print class
      $class = '[' . $class . ']';
      print "\nEquivalent class = ", $class, "\n";
}

else {
    print "\nNothing in range!\n";
}

你的问题答案不清楚…为什么是正则表达式?请使用合适的工具进行此项工作。我想过滤用户输入的密码,以便密码由大写字母和小写字母、数字和符号组成…上述条件基于ASCII表,但我想创建一个满足要求的正则表达式模式…有一个你的情况也有错误:s不能在97和122之间,也不能在65和90之间。我认为这个问题的编辑版本值得保留。
$class = '';
$valid = 0;
$pad   = "\x{100}";
$range = "\x{101}";

for $s (0 .. 255)
{
   if (   ($s >= 33  && $s <= 47)
       || ($s >= 58  && $s <= 64)
       || ($s >= 91  && $s <= 96)
       || ($s >= 123 && $s <= 140)
       || ($s >  4   && $s <  25)
       || ($s >  180)
       || ($s == 0)
  )
   {
      $class .= chr($s);
      $valid = 1;
      # print $s,"\n";
   }
   else {
      $class .= $pad;
   }
}

if ( $valid)
{
   # Escape special class characters
      $class =~ s/([\[\]\-\^\\])/\\$1/g;

   # Compact range, insert delimiter, then remove padding
      $class =~ s/(\\?[^$pad])[^$pad]+(\\?[^$pad])/$1$range$2/g;
      $class =~ s/[$pad]//g;

   # Convert non-printable ASCII characters to hex (does not process delimeter)
      $class =  join '', 
              map { my $v = ord($_);
                    $v != ord($range) && ($v < 32 || ($v > 126 && $v < 256)) ?
                    sprintf("\\x%.2x", $v) : $_
              } split (//, $class);

   # Insert range operator's
      $class =~ s/[$range]/-/g;

   # Print class
      $class = '[' . $class . ']';
      print "\nEquivalent class = ", $class, "\n";
}

else {
    print "\nNothing in range!\n";
}
Equivalent class = [\x00\x05-\x18!-/:-@\[-`{-\x8c\xb5-\xff]