Let me clarify what I want. I have next string:
<tag param=1> bla bla bla </tag> <tag param=1> 1111111111 </tag> <tag param=2> 1111111111 </tag>
I want get two matches for each tag with param=1 and their contents. To do it I use next code:
var matches = Regex.Matches(myString, "<tag param=1(.|\n)*</tag>");
But I get only one match for all string. I suppose it happens because it finds the first tag, handle all other symbols with
(.'\n)* and after this meets last
</tag>. Can I somehow add restriction that it should stop matching after first found
The letters you are capturing between the opening and closing tags (
(.|\n)*) is greedy. Add a
? to it to make it "lazy" – it will capture the least amount of letters needed.
<tag param=1(.|\n)*?</tag> ^
matches will have 2 elements, and you can take the
.First() from it.
Still going to recommend that you use an HTML/XML parser instead. If your schema becomes more complex, such as having a
<tag> inside a
<tag>, no amount of regex can save you.