I'm writing a checker with Regex, and I'm testing results with one of the popular tools:
that one little detail is missing: @
in your code. The page will add it for you
private bool IsProcessColumn(string column)
{
return Regex.IsMatch(column, @"Process(. )\\. ");
}
Here is a fiddle for testing
Explanation: The problem is that the character \
is a special character and in the context of regex also ambiguous.
- It is used as escape character in a normal string.
- In Regex it is used for special characters like
\d
(digits) and to mark the real character like:\.
(matching a real dot)
So without the @
the pattern is interpreted as looking for a dot because the first backslash is an escape character that makes the second backslash to a modifier for regex which is applied to the dot: \.
. You can test it by inserting a dot into the last string:
string a5 = "Process(DcCutting)\\%. Processor Time";
and you will have a match with your original pattern.
Using the @
(which means that you don't need to escape special characters) results in the first backslash being treated already as a modifier for regex which is then applied to the second backslash: \\
which tries to match a real backslash in the string, and the .
is then interpreted as a wildcart.
Sounds horribly complicated. I hope I was at least a little understandable