Я пытаюсь использовать обратную ссылку для сопоставления всех экземпляров импортируемого класса, для которого создается экземпляр ripgrep
с включенной опцией --pcre2
.
Сначала я смотрю, импортируется ли класс, а затем возвращаюсь к нему, чтобы посмотреть, где он создан.
Первая попытка: соответствует первому вхождению new ExifInterface(str)
Мое регулярное выражение: (import.+(ExifInterface)).+(new\s\2\(.+\))
Вторая попытка: соответствует последнему вхождению new ExifInterface(str)
. Мое регулярное выражение (import.+(ExifInterface)).+(?:.+?(new\s\2\(.+\)))
Моя ripgrep
команда rg --pcre2 --multiline-dotall -U "(import.+(ExifInterface)).+(new\s\2\(.+?\))" -r '$3' -o
Вопрос . Как я могу сопоставить все вхождения new ExifInterface(str)
Бонусный вопрос: В некоторых случаях я получаю PCRE2: error matching: match limit exceeded
stderr от rg
, но не могу понять, почему. Длина документа составляет всего 161 строку.
Ссылка на регулярное выражение101
Рассмотрим следующую выборку данных:
import android.graphics.Point;
import android.media.ExifInterface;
import android.view.WindowManager;
import java.io.IOException;
public class MediaUtils {
/* renamed from: a */
public static float m13571a(String str) {
if (str == null || str.isEmpty()) {
throw new IllegalArgumentException("getRotationDegreeForImage requires a valid source uri!");
}
try {
int attributeInt = new ExifInterface(str).getAttributeInt("Orientation", 1);
if (attributeInt == 3) {
return 180.0f;
new ExifInterface(str).getAttributeInt("Orientation", 1);
}
if (attributeInt == 6) {
return 90.0f;
}