Если вы сопоставляете обе части с одним и тем же подшаблоном (например, \w+
), вам не повезло. Но если подшаблоны заметно отличаются, у вас есть несколько вариантов, ни один из них не очень красивый. Вот регулярное выражение, использующее условную конструкцию для сопоставления атрибутов src
и type
элемента сценария HTML в любом порядке:
\b(?(?=src=)
src="([^"]*)"\s+type="([^"]*)"|
type="([^"]*)"\s+src="([^"]*)"
)
(ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: это регулярное выражение делает много нереалистичных предположений, главным из которых является то, что оба атрибута будут присутствовать и что они будут смежными друг с другом. Я использую его только для иллюстрации техники.)
Если атрибут src
появляется первым, значения src
и type
будут включены в первую и вторую группы соответственно. В противном случае они появятся в четвертой и третьей группах соответственно. Именованные группы облегчили бы отслеживание вещей, особенно если бы можно было использовать одно и то же имя в более чем одном месте, как в регулярных выражениях .NET. К сожалению, PCRE требует, чтобы каждая именованная группа имела уникальное имя, что очень плохо; это очень хорошая особенность.