Регулярное выражение для: имя,: другое имя,: другое - PullRequest
2 голосов
/ 03 июня 2011

Я пытаюсь получить все имена в такой строке:

:name, :lastName

Но я не могу найти правильный путь.

Это то, что я пробовал до сих пор:

/^(:((\w+)(,:(\w+))+).*)$/

В Java:

Pattern a = Pattern.compile("(:((\\w+)(,:(\\w+))+).*)");
Matcher m = a.matcher(":name,:lastName,:bd");
if( m.matches() ) { 
  for( int i = 0 ; i < m.groupCount() ; i++ ) { 
    out.println( i + " = " + m.group( i ) );
  }   
}

Выход:

0 = :name,:lastName,:bd
1 = :name,:lastName,:bd
2 = name,:lastName,:bd
3 = name
4 = ,:bd

И я пытаюсь получить переменное количество групп, содержащих [name, lastName, bd]

EDIT

Кстати, я пытаюсь получить это для более сложного регулярного выражения, чтобы соответствовать простым вещам, таким как:

 insert into table values ( :a, :b, :c )

/insert\s+into\s+(\w+)\s+values\s+(\( HERE IS MY QUESTION \))/

Ответы [ 4 ]

4 голосов
/ 03 июня 2011

Требуется ли размещать результат в разных группах? Это будет работать иначе:

Pattern a = Pattern.compile(":([^,]+)");
Matcher m = a.matcher(":name,:lastName,:bd");
while (m.find()) {
    System.out.println(m.group(1));
}

Редактировать: ... и вы можете использовать split, если хотите получить массив результатов:

String data = ":name,:lastName,:bd";
String[] parts = data.replace(":", "").split(",", -1);
System.out.println(Arrays.toString(parts));
3 голосов
/ 03 июня 2011

Возможно, вы хотите это:

public static void main(String[] args) {
    Pattern a = Pattern.compile(":(\\w+)");
    Matcher m = a.matcher("insert into table values ( :a, :b, :c )");
    while (m.find()) {
        System.out.println(m.group(1));
    }
}

который выводит:

a
b
c
2 голосов
/ 03 июня 2011

регулярное выражение трудно. Почему бы просто не split() это?

String inputString = ":name,:lastName,:bd";

for (String s : inputString.split(",?:")) {
    System.out.println(s);
}
2 голосов
/ 03 июня 2011
public static void main(String[] args)
{
    Pattern a = Pattern.compile(":([^,]+)");
    Matcher m = a.matcher(":name,:lastName,:bd");
    while (m.find())
    {
        System.out.println(m.group(1));
    }

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