$re = '/interface\s([\S]+?)\.(\d+)\s+(description\s(?:[^a-zA-Z0-9]?([\S]+)[^a-zA-Z0-9]?))*(?:encapsulation\sdot1q\s(\d+)\s*)*(?:second-dot1q\s(\S+)\s+)*(?:rewrite\singress\stag\s(.+?)\s{2,})*(?:service-policy\sinput\s([\S]+)\s+)*(?:service-policy\soutput\s([\S]+))*.+?(?:\s*!|\s+service\sinstance)/';
$str = 'interface Loopback9 description RIFERIMENTO LDP/EoMPLS ip address 172.16.116.23 255.255.255.255!
interface Port-channel2 description KdC-TEST_ESPOSITO/CANDIDO_3263 mtu 9206 no ip address logging event link-status load-interval 30 shutdown
service instance 301 ethernet description LINK-to-OLO encapsulation dot1q 269 second-dot1q 301 rewrite ingress tag pop 1 symmetric group 12333 service-policy input BTS_P01_B-96k_B3-0_B5-0_B6-0_IN service-policy output BTS_P01_B-96k_B3-0_B5-0_B6-0_OUT xconnect 172.16.116.249 570435069 encapsulation mpls mtu 9206
service instance 301 ethernet description LINK-to-OLO encapsulation dot1q 269 second-dot1q 301 rewrite ingress tag pop 1 symmetric group 12333 service-policy input BTS_P01_B-96k_B3-0_B5-0_B6-0_IN service-policy output BTS_P01_B-96k_B3-0_B5-0_B6-0_OUT xconnect 172.16.116.249 570435069 encapsulation mpls mtu 9206 !
service instance 4001 ethernet description SI_VLAN-PING encapsulation dot1q 4001 rewrite ingress tag pop 1 symmetric service-policy input PING_LIMIT bridge-domain 4001 !!
interface Port-channel2.302 description "vlan_pseudo_lato_olo" encapsulation dot1q 1327 second-dot1q 1001 rewrite ingress tag pop 1 symmetric service-policy input GBE_remark_in service-policy output GBE_remark_out !
interface Port-channel2.302 description test_subif!';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for PHP, please visit: http://php.net/manual/en/ref.pcre.php