Почему регулярное выражение соответствует одному символу меньше в конце? - PullRequest
0 голосов
/ 29 июня 2018

Проблема в последний раз, один символ никогда не совпадает. Когда я попытался отобразить с помощью группы, он показывает все совпадения, кроме последнего символа. Это одинаково во всех случаях. Ниже приведен код и его о / п.

package mon;
import java.util.*;
import java.util.regex.*;

class HackerRank {

static void Pattern(String text) {
    String p="\\d{1,2}|(0|1)\\d{2}|2[0-4]\\d|25[0-5]";
    String pattern="(("+p+")\\.){3}"+p;

    Pattern pi=Pattern.compile(pattern);
    Matcher m=pi.matcher(text);
//  System.out.println(m.group());
    if(m.find() && m.group().equals(text))
        System.out.println(m.group()+"true");
    else
        System.out.println(m.group()+" false");
   }
   public static void main(String[] args) {

    Scanner sc=new Scanner(System.in);
    while(sc.hasNext()) {
        Pattern(sc.next());
    }
   sc.close();


   }

}

I / P: 000.12.12.034; O / P: 000.12.12.03 false

1 Ответ

0 голосов
/ 29 июня 2018

Вы должны правильно сгруппировать альтернативы внутри шаблона октетов:

String p="(?:\\d{1,2}|[01]\\d{2}|2[0-4]\\d|25[0-5])";
//        ^^^                                     ^

Затем создайте скороговорку как

String pattern = p + "(?:\\." + p + "){3}";

Это станет немного эффективнее. Затем используйте matches для запроса полного совпадения строки:

if(m.matches()) {...

См. Демонстрационную версию Java :

String p="(?:\\d{1,2}|[01]\\d{2}|2[0-4]\\d|25[0-5])";
String pattern = p + "(?:\\." + p + "){3}";
String text = "192.156.34.56";
// System.out.println(pattern); => (?:\d{1,2}|[01]\d{2}|2[0-4]\d|25[0-5])(?:\.(?:\d{1,2}|[01]\d{2}|2[0-4]\d|25[0-5])){3}
Pattern pi=Pattern.compile(pattern);
Matcher m=pi.matcher(text);
if(m.matches())
    System.out.println(m.group()+" => true");
else
    System.out.println("False"); => 192.156.34.56 => true

И вот демоверсия регулярного выражения .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...