繁体   English   中英

相当于Java Matcher.hitEnd()的C#

[英]C# equivalent of java Matcher.hitEnd()

C#正则表达式java.util.regex.Matcher.hitEnd()是否有等效的java.util.regex.Matcher.hitEnd()

boolean hitEnd() Javadoc:

如果在此匹配器执行的最后一个匹配操作中搜索引擎命中输入的末尾,则返回true。 当此方法返回true时,则可能有更多输入会更改上一次搜索的结果。

@return true,如果在最后一场比赛中输入的结尾被击中; 否则为假

更多参考hitEnd

要知道是否已经达到终点-

我认为这和加(\\z)?一样容易(\\z)? 在正则表达式的末尾,
或正则表达式中您认为可以匹配末尾的任何位置。

这是您可以做的被动检查,不会干扰任何
任何其他方式的构造。

这是C#示例用法:

var str =
    "Foo $var1 <br/>Yes\n" +
    "......... <br/>\n" +
    "......... <br/><br/>\n" +
    "Foo $var2 <br/>Yes\n" +
    "..........<br/>\n" +
    "Yes..........<br/>\n" +
    "..........<br/>\n" +
    "YesYes";

var rx = new Regex(@"Yes(\z)?");

Match M = rx.Match(str);
while (M.Success)
{
    bool bAtEnd = M.Groups[1].Success;
    Console.WriteLine("Match = {0} , At end  {1}", M.ToString(), bAtEnd);
    M = M.NextMatch();
}

输出:

Match = Yes , At end  False
Match = Yes , At end  False
Match = Yes , At end  False
Match = Yes , At end  False
Match = Yes , At end  True

没有。

但是自己构建它并不难。

如果使用Regex.Match(…) (即匹配表达式一次),则:

bool hitEnd = match.Success && input.Length == (match.Index + match.Length)

如果使用Regex.Matches(…)返回MatchCollection ,则需要最后一次成功匹配(需要一些Enumerable帮助),并且可以轻松地作为扩展方法:

static bool HitEnd(this MatchCollection matches, string input) {
  if (matches.Count == 0) {
    return false; // No matches at all
  }
  var lastMatch = matches.Cast<Match>().Last();
  return input.Length == (lastMatch.Index + lastMatch.Length)
}

内置.NET替代

似乎没有直接内置的.NET替代方法(在System.Text.RegularExpressions命名空间内)替代Java java.util.regex.Matcher.hitEnd()方法。

替代库

可能会找到提供所需替代方案的替代库。

网站

例如,快速搜索显示了以下库: ltrzesniewski / pcre-net:PCRE.NET-.NET的Perl兼容正则表达式 根据其文档( README.md ),该库支持部分匹配:

用法示例

<...>

  • 部分匹配:

     var regex = new PcreRegex(@"(?<=abc)123"); var match = regex.Match("xyzabc12", PcreMatchOptions.PartialSoft); // result: match.IsPartialMatch == true 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM