It seems the .NET Regex.Replace method automatically replaces all matching occurrences. I could provide a MatchEvaluator delegate that returns the matched string after the
From MSDN:
Replace(String, String, Int32)
Within a specified input string, replaces a specified maximum number of strings that match a regular expression pattern with a specified replacement string.
Isn't this what you want?
You were probably using the static method. There is no (String, String, Int32) overload for that. Construct a regex object first and use myRegex.Replace.
In that case you can't use:
string str ="abc546_$defg";
str = Regex.Replace(str,"[^A-Za-z0-9]", "");
Instead you need to declare new Regex instance and use it like this:
string str ="abc546_$defg";
Regex regx = new Regex("[^A-Za-z0-9]");
str = regx.Replace(str,"",1)
Notice the 1, It represents the number of occurrences the replacement should occur.
Just to answer the original question... The following regex matches only the first instance of the word foo:
(?<!foo.*)foo
This regex uses the negative lookbehind (?<!) to ensure no instance of foo is found prior to the one being matched.