using System; using System.Text.RegularExpressions; namespace SharpCifs.Util.Sharpen { internal class Matcher { private int _current; private MatchCollection _matches; private Regex _regex; private string _str; internal Matcher(Regex regex, string str) { this._regex = regex; this._str = str; } public int End() { if ((_matches == null) || (_current >= _matches.Count)) { throw new InvalidOperationException(); } return (_matches[_current].Index + _matches[_current].Length); } public bool Find() { if (_matches == null) { _matches = _regex.Matches(_str); _current = 0; } return (_current < _matches.Count); } public bool Find(int index) { _matches = _regex.Matches(_str, index); _current = 0; return (_matches.Count > 0); } public string Group(int n) { if ((_matches == null) || (_current >= _matches.Count)) { throw new InvalidOperationException(); } Group grp = _matches[_current].Groups[n]; return grp.Success ? grp.Value : null; } public bool Matches() { _matches = null; return Find(); } public string ReplaceFirst(string txt) { return _regex.Replace(_str, txt, 1); } public Matcher Reset(CharSequence str) { return Reset(str.ToString()); } public Matcher Reset(string str) { _matches = null; this._str = str; return this; } public int Start() { if ((_matches == null) || (_current >= _matches.Count)) { throw new InvalidOperationException(); } return _matches[_current].Index; } } }