Регулярное выражение Java - PullRequest
2 голосов
/ 13 июня 2011

Я пытаюсь проверить следующие строки:

org/com[2]/net[4]/uk@name  
org/com[2]/net[4]

Почему не работает следующее регулярное выражение:

(((.*(\[.*?\])((\/)?)))|(\@(.*)))

Пожалуйста, помогите.

Ответы [ 2 ]

3 голосов
/ 13 июня 2011

Почему не работает следующее регулярное выражение:

Ваше выражение может быть разбито на

  • (.*(\[.*?\])((\/)?)) или
  • (\@(.*))

Прежнюю часть можно разбить на

  • .*, затем
  • \[.*?\] (что не совпадает с (\[.*\])?), возможно с последующим
  • /

Вот еще одно предложение:

String part = "[^/\\[\\]]+(\\[\\d*\\])?";
String pattern = String.format("%s(/%<s)*(@.*)?", part);

Контрольные примеры:

String[] tests = {
        "org/com[2]/net[4]/uk@name",
        "org/com[2]/net[4]",
        "org/com[2/net",
        "org/com2]/net",
        "org/com[2]/net",
        "org/com[2]/net/",
        "org/com[2]/net@blah",
};

for (String test : tests)
    System.out.println(test + ": " + test.matches(pattern));

Выход:

org/com[2]/net[4]/uk@name: true
org/com[2]/net[4]: true
org/com[2/net: false
org/com2]/net: false
org/com[2]/net: true
org/com[2]/net/: false
org/com[2]/net@blah: true
1 голос
/ 13 июня 2011

Попробуйте это.

    String s = "org/com[2]/net[4]/uk@name";
    System.out.println(s.matches("^\\w+/\\w+\\[\\d\\]/\\w+\\[\\d\\](/\\w+@\\w+)?$"));
    s = "org/com[2]/net[4]";
    System.out.println(s.matches("^\\w+/\\w+\\[\\d\\]/\\w+\\[\\d\\](/\\w+@\\w+)?$"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...