$re = '/(<Group id="\d+">\n\t\t\t<Name>)(\w+)_(\w+)(<\/Name>\n\t\t\t<Description>)([\w+\s]+)\s-\s([\w+\s]+)(<\/Description>)/m';
$str = ' <Group id="100">
<Name>generalAlarm_Group01</Name>
<Description>Group General Alarm 01</Description>
<Type>poll</Type>
<Content multipleGet="true">
<Param>100</Param>
<Param>101</Param>
<Param>103</Param>
<Param>104</Param>
<Param>120</Param>
<Param>121</Param>
</Content>
</Group>
<Group id="110">
<Name>generalConfig_Group01</Name>
<Description>Group General Config 01</Description>
<Type>poll</Type>
<Content multipleGet="true">
<Param>105</Param>
<Param>106</Param>
<Param>107</Param>
<Param>108</Param>
<Param>109</Param>
<Param>110</Param>
<Param>111</Param>
<Param>112</Param>
<Param>113</Param>
</Content>
</Group>
<Group id="1000">
<Name>firstPriorityAlarmConfig_Group1000</Name>
<Description>First Priority Alarm Config Table - Group 1000</Description>
<Type>poll</Type>
<Content multipleGet="true">
<Param>1000</Param>
</Content>
</Group>
<Group id="2000">
<Name>secondPriorityAlarmConfig_Group2000</Name>
<Description>Second Priority Alarm Config Table - Group 2000</Description>
<Type>poll</Type>
<Content multipleGet="true">
<Param>2000</Param>
</Content>
</Group>
<Group id="3000">
<Name>thirdPriorityAlarmConfig_Group3000</Name>
<Description>Third Priority Alarm Config Table - Group 3000</Description>
<Type>poll</Type>
<Content multipleGet="true">
<Param>3000</Param>
</Content>
</Group>';
$subst = "$1$3_$2$4$6 - $5$7";
$result = preg_replace($re, $subst, $str);
echo "The result of the substitution is ".$result;
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