Способ работы неохотного (не жадного) квантификатора заключается в том, что, как только он начинает совпадать, он останавливается при первой возможности. То, что вы пытаетесь сделать, - это сопоставить минимальный объем текста, который соответствует вашим критериям, что не одно и то же; Вы все еще должны убедиться, что он не начать соответствия, прежде чем вы этого хотите. Как уже предлагали другие, вы можете сделать это, заменив .+?
в своем регулярном выражении чем-то, что не соответствует кавычкам, например [^""]+
.
Но это все еще оставляет вас с проблемой производительности. В вашем примере регулярное выражение начинает совпадать, когда видит кавычку в center">
; когда он достигает котировки на src="
(при условии, что вы изменили .+?
на [^""]+
), он прерывает эту попытку, пытаясь двигаться дальше. Следующая попытка, начиная с цитаты в src="
, будет успешной. Таким образом, вы получаете правильный результат сейчас, но вы все еще тратите много времени на первую неудачную попытку матча.
Ключ к написанию быстрых регулярных выражений состоит в том, чтобы убедиться, что, если попытка совпадения потерпит неудачу, она потерпит неудачу как можно быстрее. Например, я думаю, можно с уверенностью предположить, что вам не нужны угловые скобки между "
и /thumbs/
, поэтому добавьте их в набор символов, которые вы не хотите сопоставлять: [^""<>]+
. Теперь любая попытка совпадения, начинающаяся с кавычки в center">
, будет прервана на следующей позиции.
Есть и другие вещи, которые вы можете сделать для дальнейшей оптимизации регулярного выражения, включая атомные группы и негативные взгляды, но это, вероятно, будет так быстро, как вам нужно:
@"""([^""<>]+/thumbs/[^""<>]+)"""