Это, вероятно, не 100%, а как предложение:
([^<>]+)(?![^<>]*(?:>|<\/))
Это говорит о совпадении символов, за которыми не следует скобка закрытия (для исключения содержимого тега) или
Тест:
$s = 'lorem ipsum <a href="http://example.com">example.com</a> dolor sit amet';
while ($s =~ /([^<>]+)(?![^<>]*(?:>|<\/))/g) { print $1 }
Выход:
lorem ipsum dolor sit amet
$s = 'lorem ipsum <a href="http://example.com">example.com</a> dolor sit amet';
while ($s =~ /([^<>]+)(?![^<>]*(?:>|<\/))/g) { print $1 }
Выход:
lorem ipsum dolor sit amet
] Тест:
$s = 'lorem ipsum <do not match this> dolor sit amet';
while ($s =~ /([^<>]+)(?![^<>]*(?:>|<\/))/g) { print $1 }
Выход:
lorem ipsum dolor sit amet
Надеюсь, что это поможет.