Я имею регулярное выражение в Javascript, который отлично работает: /:([\w]+): /g
Я работаю над преобразованием своего javascript-приложения в java, и я знаю, чтобы избежать \use\ie /:([\\w]+): /g
, но мои тесты по-прежнему не возвращают соответствия для строки "hello: testsmilie: как твои дела?"
Pattern smiliePattern = Pattern.compile("/:([\\w]+):/g");
Matcher m = smiliePattern.matcher(message);
if(m.find()) {
System.println(m.group(0));
}
В javascript он возвращает ": testsmilie:" просто отлично, поэтому я не уверен, в чем разница. Любая помощь приветствуется!
Ваше регулярное выражение в java может просто быть:
Pattern.compile(":[^:]+:")
Какое совпадение :
за ним следует одна или несколько двух точек :
за ними следуют :
Или, если вы хотите использовать \w
вы можете использовать:
Pattern.compile(":\\w+:")
Если вы заметили, что вам не нужны скобки для группы ()
, чтобы получить результат, вы можете просто использовать:
System.out.println(m.group());
Вы должны узнать, как делается регулярное выражение Javascript, поскольку /
являются разделителями реального регулярного выражения, а g
является модификатором для глобального
В Java эквивалент :([\\w]+):
и нет необходимости в глобальном флаге, поскольку вам просто нужно вызывать несколько раз .find()
чтобы получить все совпадения
Вы должны взглянуть на regex101, который является хорошим веб-сайтом для тестирования регулярного выражения