2016-03-30 6 views
2

У меня возникла особая ситуация, когда мне нужно проверить строку.Регулярное выражение, чтобы проверить, содержит ли строка «1-n» целые числа, а затем «0-m». Алфавиты

Строка должна соответствовать некоторым критериям для дальнейшего перемещения. которые являются:

  1. Строка должна начинаться с целочисленным значением, длина которого должна быть> 1 и < п

  2. , а затем следуют алфавитов, длина которых должна быть от 0 до т (что означает алфавит может присутствовать или может не присутствовать)

myString.charAt(0) дает мне, если строка начинается с Integer.

Как утвердить его содержит только < n целых чисел?

Как проверить его по> 0 и < n целых чисел, за которыми следует 0 до < m алфавитов?

Могу ли я получить регулярное выражение для его решения?

+0

Что вы подразумеваете под «alphabets»? Просто письма? –

+0

@WashingtonGuedes вы можете объяснить подробно? –

+0

@DarthAndroid да Я имел в виду буквы –

ответ

2

Это должно работать

^\d{1,n - 1}[A-Za-z]{0,m - 1}$ 

Как вы хотите < n. Так оно и должно быть n-1

DEMO

кода в JAVA

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class RegexMatches 
{ 
    static boolean isValid(String x, int n, int m) 
    { 
     String pattern = "^\\d{1," + (n - 1) + "}[A-Za-z]{0," + (m - 1) + "}$"; 

     Pattern r = Pattern.compile(pattern); 

     Matcher t = r.matcher(x); 
     return t.find(); 
    } 
public static void main(String args[]){ 

    // String to be scanned to find the pattern. 
    String line = "123abcdef"; 
    int n = 4, m = 4; 

    if (isValid(line, n, m)) { 
     System.out.println("FOUND"); 
    } else { 
     System.out.println("NOT FOUND"); 
    } 

    } 
} 

Значение n должно быть больше или равно 2 и значение m должно быть больше, чем 1

IDEONE DEMO

+0

Спасибо :) вы решили. Это помогло много –

+0

@WashingtonGuedes Спасибо за предложение .. – rock321987

+0

@WashingtonGuedes Логически ваш второй комментарий должен быть правильным. Я не уверен в синтаксисе, хотя – rock321987

1

Вы можете соответствовать этому с очень простым регулярным выражением:

^(\d+)([A-z]*)$ 

1 или более цифр, а затем 0 или более букв. Вы можете очень легко захватить группы захвата, чтобы узнать, сколько цифр или сколько букв находится в строке. Если вы знаете m и n загодя, как конкретные цифры, а затем вставить их в регулярное выражение так:

При п = 4 и т = 3,

^(\d{1,4})([A-z]{0,3})$ 

Это будет соответствовать 0000aaa, но не aaa или 000aaaa.

+0

Можете ли вы дать функцию, где я могу отправить 'isValid (string, n, m)' и получить результат? –

+1

Вы пытались сделать такую ​​функцию самостоятельно? Это не кодирование ... –

0

Другой вариант решения, которое мы видели до сих пор. Все ответы действительно хорошие. Это также должно соответствовать unicode.

Pattern

\b\p{N}{1,n}\p{L}{0,m}\W 

Исходный код

public static void matchNumeroAlphaString(){ 
     int n = 3; 
     int m = 3; 
     String text = 
      "John32 54writes about this, 444 and 456Joh writes about that," + 
        " and John writes #about 9EveryThing. "; 

     String patternString = "\\b\\p{N}{1," + n + "}\\p{L}{0," + m + "}\\W"; 


     Pattern pattern = Pattern.compile(patternString); 
     Matcher matcher = pattern.matcher(text); 

     while(matcher.find()) { 
      System.out.println("Found: " + matcher.group()); 
     } 
    } 

Выход

Найдено: 444
Найдено: 456Joh