Как проверить, чтобы каждые 12-е символы должны были быть в строке с помощью шаблона регулярных выражений? - PullRequest
0 голосов
/ 30 января 2012

Привет. Я хочу проверить, что строка должна содержать запятую , в каждых 12 символах, использующих Matcher и Pattern в Java.Я использовал ^([a-zA-Z0-9\\-?\\,])+$ этот шаблон не работает для моего требования, может кто-нибудь предоставить решение по этому вопросу.Вот мой код:

package com.ibm.rock;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test{

      private Pattern pattern;
      private Matcher matcher;


 private static final String EMAIL_PATTERN ="^([a-zA-Z0-9]{11},)*[a-zA-Z0-9]{0,11}$";


      public Test(){
          pattern = Pattern.compile(EMAIL_PATTERN);
      }

      /**
       * Validate hex with regular expression
       * @param hex hex for validation
       * @return true valid hex, false invalid hex
       */
      public boolean validate(final String hex){
          System.out.println(hex.length());
          String value=hex.trim().replaceAll(" ","");


          matcher = pattern.matcher(value);
                  System.out.println("matcher:"+matcher);
          return matcher.matches();
          }else{
              return  false;
          }

      }
      public static void main(String[] args) {
        System.out.println("ProjectsValidation::"+new Test().validate("IN-07-00177 , IN-07-00533"));

      }
}

Ответы [ 4 ]

3 голосов
/ 30 января 2012

Если вы ищете только каждого 12-го символа, вы можете сделать это довольно просто:

/^(.{11},)*.{0,11}$/

Если вы хотите без запятых за исключением на 12-й позиции, попробуйте

/^([^,]{11},)*[^,]{0,11}$/
0 голосов
/ 30 января 2012

Мое понимание вопроса:

  • проверяйте каждый 12-й символ, это должно быть ",". даже если это последний символ строки.
  • Строка должна содержать не менее 12 символов, если меньше, то не соответствует

так

"abcd"  - NOT Match
"12345678901,xx" - not match
"12345678901,10987654321" - not match
"12345678901" - not match
"12345678901,10987654321," match!

Надеюсь, я правильно понял.

, то:

^(\w{11},)+$

должно работать. обратите внимание, что '\ w' может быть изменено в соответствии с вашими требованиями.

0 голосов
/ 30 января 2012

Итак, если я правильно понял, вы хотите проверить, что в определенной строке каждый 12-й элемент является запятой? Если да, то это простое регулярное выражение будет работать:

String input = "qazwsxedcrf,1234567890 ,";
Pattern p = Pattern.compile("(.{11},)+");
Matcher m = p.matcher(input);
System.out.println(m.matches());
0 голосов
/ 30 января 2012

Попробуйте это регулярное выражение:

^([a-zA-Z...]{11},)*[a-zA-Z...]{0,11}$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...