Java является одним из немногих языков, которые поддерживают не фиксированную длину просмотровые задом (который в основном означает, что вы можете использовать квантификаторы), поэтому вы можете технически использовать следующее:
(?<=^\w+)(-\w+)
Это будет соответствовать -test
, не захватывая предыдущие вещи. Однако, как правило, не рекомендуется использовать внешний вид с нефиксированной длиной, поскольку они не идеальны и не являются очень эффективными и не переносятся на других языках. Сказав это, это простой шаблон, поэтому, если вы не заботитесь о переносимости, обязательно, подойдите к нему.
Лучшее решение, хотя это группы, что вы хотите захватить, и ссылаться на захваченную группу (в данном случае, группа 1):
^\w+(-\w+)
P.S. - \w
не будет соответствовать точке, поэтому нет необходимости смотреть в будущее.
p.p.s. - ответить на ваш вопрос о том, почему ваш оригинальный шаблон ^(?=\w+)(-\w+)(?!\.)
не соответствует. Есть две причины:
1) вы начинаете с начала утверждения строки, а затем используете lookahead, чтобы узнать, следует ли, что следует, это один или несколько символов слова. Но lookaheads - утверждения с нулевой шириной, что означает, что никакие символы фактически не потребляются в матче, поэтому указатель не переходит вперед к следующим символам после матча. Таким образом, он видит, что «www» соответствует ему и переходит к следующей части шаблона, но фактический указатель не прошел мимо начала строки. Таким образом, он затем пытается соответствовать вашей части (-\w+)
. Ну, ваша строка не начинается с «-», поэтому шаблон выходит из строя.
2) (?!\.)
является негативным взглядом.Ну, ваша примерная строка показывает точку, как самую следующую вещь после вашей части «-test». Так что даже если № 1 не подведет, это не поможет.
Эти пространства присутствуют в вашем текущем регулярном выражении? Знаете ли вы, как выглядят взгляды? Какой язык/инструмент вы используете? –
Извините, удалили их сейчас. Почему нисходящий? – genonymous
Если 'www' может быть любой строкой, то я не уверен, что это требование для текста, который должен быть до матча, но не должен совпадать. – funkwurm