Итак, у меня есть это полукоммерческое регулярное выражение, которое ищет весь текст между двумя строками, а затем заменяет его.
Я ищу регулярное выражение для этого:
(jump *[A-Z].*)(?:[^])*?([A-Z].*:)
Это дает Unclosed Character Class на конечной закрывающей скобке, которую я изо всех сил пытался решить. Регулярное выражение работает как обычно в RegexR (http://regexr.com/?38k63)
Может ли кто-нибудь помочь или прозреть?
Заранее спасибо.
Ошибка здесь:
(jump *[A-Z].*)(?:[^])*?([A-Z].*:)
^
В классе символов ^
по-прежнему является особым символом. Он обычно отрицает других персонажей, когда вы их размещаете. Поэтому избегайте его с помощью \\
в Java.
Различные двигатели регулярных выражений будут обрабатывать [^]
разному. Некоторые предполагают, что это начало отрицательного символьного класса, исключая ]
и любые символы до следующего ]
в шаблоне (например, [^][]
будут соответствовать всем, кроме ]
и [
). Другие двигатели будут рассматривать как пустой отрицательный класс символов (который будет соответствовать чему-либо). Вот почему некоторые механизмы регулярных выражений будут работать, а другие сообщают об этом как об ошибке.
Если вы имели в виду, чтобы он соответствовал буквенному символу ^
, вам нужно избежать этого:
(jump *[A-Z].*)(?:[\^])*?([A-Z].*:)
Или еще лучше, просто удалите его из класса символов (вам все равно придется скрывать его, потому что ^
имеет особое значение вне класса символов):
(jump *[A-Z].*)(?:\^)*?([A-Z].*:)
Или если вы предназначались для этого, чтобы соответствовать всем до следующего [AZ].*:
Попробуйте класс символов следующим образом:
(jump *[A-Z].*)(?:[\s\S])*?([A-Z].*:)
И, конечно, потому что это Java, не забывайте, что вам нужно избежать всех символов \
в любых строковых литералах.
Проблема здесь при использовании [^]
:
(jump *[A-Z].*)(?:[^])*?([A-Z].*:)
^
-------------------|
Попробуйте это регулярное выражение:
(jump *[A-Z].*)[\\s\\S]*?([A-Z].*:)
Или это:
(?s)(jump *[A-Z].*).*?([A-Z].*:)
^
- это особый персонаж, только когда он является первым в классе персонажей, как здесь.[a^]
будет соответствовать либоa
либо^
.