hello folks,
I'm trying to do a 'medium' greediness regular expression. Here's what I
mean. I need to grab all of the DW_TAG_TI_reserved stuff and kill it (italics
below)
<die id='0x157'>
<tag>DW_TAG_TI_assign_register</tag>
<attribute>
<type>DW_AT_location</type>
<value>
<block>DW_OP_reg0</block>
</value>
</attribute>
</die>
<die id='0x8903'>
<tag>DW_TAG_TI_reserved_1</tag>
<attribute>
<type>DW_AT_name</type>
<value>
<string>C:\DOCUME~1\A0741153\LOCALS~1\Temp\TI1564:L2:2:1088629783</string>
</value>
</attribute>
<die id='0x8951'>
<tag>DW_TAG_TI_reserved_2</tag>
<attribute>
<type>DW_AT_low_pc</type>
<value>
<addr>0x1b84</addr>
</value>
</attribute>
</die>
</die>
<die id='0x130'>
<tag>DW_TAG_variable</tag>
<attribute>
<type>DW_AT_name</type>
<value>
<string>TSK_thingyIneedToKeepThis</string>
</value>
</attribute>
</die>
I did the following for killing DW_TAG_TI_assign_register.
$all_lines =~ s/<die id\S*>\s*<tag>DW_TAG_TI_assign_register.*?<\/die>//sg;
That worked fine. But the DW_TAG_TI_reserved stuff is nested. I need medium
greediness ie .* (where . also matches newline via /s) without a ? would go
too far ie it would grab everything up until last </die> which is too
much....kills stuff I need to keep. But .*? is too lazy...it doesnt handle the
nesting ie only kills up until the first </die>.
To further complicate life, I cant guarentee the level of nesting.
Any ideas on how best to reg exp this? Or do I just need to improve/narrow my
search string.
Many thanks indeed.
cheers, Alan
---------------------------------
How low will we go? Check out Yahoo! Messengers low PC-to-Phone call rates.