I need the below regex to select only those of total size X:
[[JN]*P?[JN]*]N
EDIT:
e.g. for 6:
- JJPNNN -> JJPNNN
- ONNJNNNO -> NNJNNN
- NPJNJNN -> NPJNJN, PJNJNN
- NPJNN -> False
I need it to capture the group.
I need the below regex to select only those of total size X:
[[JN]*P?[JN]*]N
EDIT:
e.g. for 6:
I need it to capture the group.
You can use lookahead to first check the length, like this:
(?=^.{6}$)[[JN]*P?[JN]*]N
Also, you seem to have too many brackets. To make the expression match your examples, you need to remove the outermost one:
(?=^.{6}$)[JN]*P?[JN]*N
Here is a small demo using ideone.
You can use the size limiting
\{5,10}
something like that limits a size of 5~10
You should look up on it, there is tons of answered questions about this topic
String test = "123456"
if(test.match("^\w{6,6}$")
{
//True if String has length of 6
}
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"));
}
}
out
false
true
true
false
false