Я пытаюсь найти методы с выражением createNamedQuery
я попробую
public[\d\D]*?createNamedQuery
но он находит первый метод, но мне нужен метод с выражением createNamedQuery
нет, я имел в виду Expression и Expression "createNamedQuery", это действительное регулярное выражение.
Этот класс персонажей выглядит действительно странно. Может быть, я еще не проснулся, но я не вижу, когда нужно искать что-то, что является цифрой или не цифрой. Это тоже способ сопоставления символов новой строки?





Я предполагаю, что ваша проблема в том, что вы не можете найти их все, а только первый. Способ получить их все различается от языка к языку. Например, в Python можно было бы сделать что-то похожее на следующее:
import re
my_data = "some long piece of data that may or may not contain what you're looking for."
for match in re.findall("public[\d\D]*?createNamedQuery", my_data):
if m is not None:
print "A match found at position %s" % m.start()
В основном просто попробуйте FindAll. Выполнение одного Match даст вам только первый.
Если вы пытаетесь найти кратчайшую последовательность, которая начинается с «public» и заканчивается «createNamedQuery», использование нежадного квантификатора недостаточно. Это будет просто совпадать от вхождения «public» в первый к первому (последующему) вхождению «createNamedQuery». Чтобы найти самую короткую последовательность, вы должны убедиться, что часть между двумя часовыми («public» и «createNamedQuery») не может снова совпадать с первым часовым. Вот один из способов:
public(?:(?!public).)*?createNamedQuery
Это не самое быстрое или надежное регулярное выражение, а просто самый простой способ (я думаю) продемонстрировать принцип. В зависимости от того, какой вид регулярного выражения вы используете, я бы использовал границы слов (большинство разновидностей) и либо атомарные группы (Perl, .NET), либо притяжательные квантификаторы (Java, PHP, JGSoft).
«Выражения» - это части реализации функции. Я думаю, вы имеете в виду метод под названием createNamedQuery.