Разница между [^d].* и ^[^d].* в java regex

#java #regex

#java #регулярное выражение

Вопрос:

^[^d].* должен возвращать true, если строка не имеет числа в начале. [^d].* похоже, работает так же ^[^d]. , как и разница между ними? Какая строка может совпадать ^[^d].* , но не с [^d].* ?

Ответ №1:

Это зависит от того, используете ли вы matches() или Matcher.find()

  • [^d].* соответствует одному символу, который не является цифрой, затем чему угодно до конца строки: например, abc .
  • ^ Привязка утверждает, что мы находимся в начале строки. Следовательно, ^[^d].* сопоставляется, начиная с начала строки, один символ, который не является цифрой, а затем что угодно до конца строки. Это будет соответствовать строке abc , но не будет совпадать abc с этой строкой: 1 abc
  • В Java, используя matches() метод, не будет никакой разницы в качестве matches() совпадений, если шаблон соответствует всей строке (он не ищет потенциальные совпадения подстрок). Использование matches() — это то же самое, что и использование регулярного выражения, полностью привязанного к ^ и $
  • Если вы используете Matcher.find() , вы увидите разницу выше, поскольку он ищет совпадения в любом месте строки темы.

Ссылка

Комментарии:

1. Спасибо, рад, что это помогает! 🙂