Это трейлинг? это делает вас вменяемым. Причина: помечая это как необязательное, вы разрешаете. +? чтобы схватить его.
blablabla.*(?:<a href="((http://)?.*)".+target="_blank".*>)
Я немного его изменил ... .+?
в основном совпадает с .*
, и если у вас может не быть ничего в вашем href (вы указали, что хотели ""), вам нужно сделать http необязательным, а завершающий текст. Кроме того, .*
перед target
означает, что у вас есть хотя бы один пробел или символ, но может быть больше (несколько пробелов или других атрибутов). .*
перед >
означает, что после вас могут остаться пробелы или другие атрибуты.
Это не будет совпадать со строкой, если нет <a href...>
, но это то, что вы хотите, верно?
(?: ... )
можно полностью сбросить, если вам не нужно захватывать всю часть <a href...>
.
Это не удастся, если атрибуты не перечислены в указанном порядке ... что является одной из причин, по которой регулярное выражение не может быть использовано для анализа html. Но если вы уверены, что href всегда будет стоять перед целью, это должно сделать то, что вам нужно.