84 lines
1.6 KiB
C#
84 lines
1.6 KiB
C#
|
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;
|
||
|
}
|
||
|
}
|
||
|
}
|