2014-08-28 4 views
1

мне нужно ниже регулярное выражение, чтобы выбрать только те из общего размера X:Regex Java Общая Длина строки

[[JN]*P?[JN]*]N 

EDIT:

например для 6:

  • JJPNNN -> JJPNNN
  • ONNJNNNO -> NNJNNN
  • NPJNJNN -> NPJNJN, PJNJNN
  • NPJNN -> False

мне это нужно, чтобы захватить группу.

+0

Будет ли это работать? '([[JN] * Р? [JN] *] N) {6}'? –

+0

Возможный дубликат [ограничение максимальной длины регулярного выражения] (http://stackoverflow.com/questions/6503177/regexp-maximal-length-restrict) –

+0

@BuhakeSindi Нет, это не так. что будет повторяться весь шаблон 6 раз ... – bcsb1001

ответ

0

Вы можете использовать размер ограничивающего

\{5,10} 

что-то подобное ограничивает размер 5 ~ 10

Вы должны смотреть на него, есть тонны отвеченные вопросы по этой теме

1

Вы можете использовать предпросмотр сначала проверить длину, как это:

(?=^.{6}$)[[JN]*P?[JN]*]N 

Кроме того, у вас, похоже, слишком много скобок. Для того, чтобы выражение соответствует вашим примерам, вам нужно удалить крайние один:

(?=^.{6}$)[JN]*P?[JN]*N 

Here небольшой демо с помощью ideone.

+0

Можете ли вы помочь с отредактированным требованием? –

0
String test = "123456" 
if(test.match("^\w{6,6}$") 
{ 
    //True if String has length of 6 
} 
+0

OP хочет, чтобы регулярное выражение возвращало true, если оно соответствует шаблону '[JN] * P? [JN] *] N' ** и ** имеет длину 6. Не тот или другой. – bcsb1001

0
public class Main { 


    private static boolean match(String line) { 
     Pattern p = Pattern.compile("^(?=[JNP]{6}$)[JN]*P?[JN]*N$"); 
     Matcher m = p.matcher(line); 
     return m.matches(); 
    } 

    public static void main(String[] args) { 

     System.out.println(match("JJPN")); 
     System.out.println(match("JJPNNN")); 
     System.out.println(match("NNJNNN")); 
     System.out.println(match("NPJNJNN")); 
     System.out.println(match("NPJNJNNNN")); 

    } 
} 

из

false 
true 
true 
false 
false 
Смежные вопросы