Перекрытие регулярное выражение
Я нашел аналогичный вопросздесь . Однако у меня это не получилось:
У меня есть строка типа "my_token_string", и мне нужно регулярное выражение для возврата маркеров" my_"," _token_ "и"_string".
Обратите внимание, что я не могу изменить java-код, потому что он является частью другого программного обеспечения. Единственное, что я могу сделать, это указать шаблон и группу для захвата : -)Вот что я проверил:
String p = "(?=(_[^_]*_?))";
int group = 1;
String test = "my_token_string";
Matcher m = Pattern.compile(p).matcher(test);
while (m.find()) {
System.out.println(m.group(group));
}
Но, конечно, это возвращает только токены " _token_" и "_string".
2 ответа:
Вы можете попробовать с
"(?=((^|_).+?(_|$)))"
. В качестве номера группы используйте1
.Это позволит токену начать с
_
или начала ввода (^
) и закончить его с_
или конца ввода ($
). Вместо.+?
Вы можете использовать[^_]+
, но я предпочитаю эту версию.
Этого можно достичь с помощью регулярного выражения:
(?=((?:_|^)[^_]*+(?:_|$)))
Объясненная демонстрация здесь: http://regex101.com/r/tB0bZ4