C#相当于javamatcher.hitEnd()

C#相当于javamatcher.hitEnd(),c#,java,regex,C#,Java,Regex,在C#regex中是否存在与java.util.regex.Matcher.hitEnd()等价的 用于布尔hitEnd()的Javadoc: 如果搜索引擎在此匹配器执行的最后一次匹配操作中命中了输入的结尾,则返回true。当此方法返回true时,可能更多的输入会更改上次搜索的结果 @如果在最后一场比赛中输入结束,返回true;否则就错了 更多参考否 但自己建造并不难 如果使用(即匹配表达式一次),则: 如果需要使用返回最后一个成功匹配的方法(需要一些帮助),并且可以很容易地作为扩展方法: st

在C#regex中是否存在与java.util.regex.Matcher.hitEnd()等价的

用于
布尔hitEnd()的Javadoc

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

@如果在最后一场比赛中输入结束,返回true;否则就错了

更多参考

但自己建造并不难

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

如果需要使用返回最后一个成功匹配的方法(需要一些帮助),并且可以很容易地作为扩展方法:

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)
}
static bool HitEnd(此匹配集合匹配,字符串输入){
if(matches.Count==0){
return false;//完全没有匹配项
}
var lastMatch=matches.Cast().Last();
返回input.Length==(lastMatch.Index+lastMatch.Length)
}

要知道是否已到达终点-

我认为在正则表达式的末尾添加
(\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();
}
内置.NET替代方案 对于Java
Java.util.regex.Matcher.hitEnd()
方法,似乎没有直接内置的.NET替代方法(在
System.Text.RegularExpressions
命名空间中)

替代图书馆 也许可以找到一个提供所需替代方案的替代库

PCRE.NET 例如,快速搜索显示库:。根据其文档(
README.md
),该库支持部分匹配:

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

  • 部分匹配:

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

    var regex=new PcreRegex(@)(?这不等同于
    stuff_这里$
    ?你对这个方法的理解是什么,但在C中,我想你必须使用PCRE.Net包,因为函数来自内置的正则表达式解析器/编译器,而CLR默认解析器缺少它。不是那样。你错了。例如,Java
    hitEnd
    regex=“[0-9]abc”;input=”1ab“
    ”不匹配,但hitEnd是真的。@Michael,如果你对这个失败案例感兴趣……如果可能的话,那就更难确定了(这是一个很大的If).部分匹配的意思和达到结尾是一样的吗?真的,这和结尾有什么关系。显然,你不需要一个库来找到它。@sln,引用:«部分匹配(当主题太短而无法匹配模式时)»。据我所知,这意味着主题的结尾(输入字符串)已经被击中了。开始想知道你是否需要一个额外的库来比较匹配位置加长度和目标长度,你知道我的意思吗?我的意思是,正则表达式中没有魔法,绝对没有,没有Elixer,这都是胡说八道和蛇形油我的伙计!!一堆妖怪和妖怪。。
    var regex = new PcreRegex(@"(?<=abc)123");
    var match = regex.Match("xyzabc12", PcreMatchOptions.PartialSoft);
    // result: match.IsPartialMatch == true