java.util.regex.Matcher.hitEnd()
在 C# 正则表达式中是否有等价物?
Javadoc 用于boolean hitEnd()
:
如果在此匹配器执行的最后一次匹配操作中搜索引擎命中输入结尾,则返回 true。当此方法返回 true 时,更多输入可能会改变上次搜索的结果。
@return true 如果在最后一场比赛中输入的结尾被击中;否则为假
更多参考hitEnd
要知道是否已经到达终点 -
(\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)
}
System.Text.RegularExpressions
Javajava.util.regex.Matcher.hitEnd()
方法似乎没有直接的内置 .NET 替代方案(在命名空间内)。
可能会找到一个替代库来提供所需的替代方案。
例如,快速搜索发现库:ltrzesniewski/pcre-net: PCRE.NET - Perl Compatible Regular Expressions for .NET。根据其文档 ( README.md
),该库支持部分匹配:
示例用法
<…>
部分匹配:
var regex = new PcreRegex(@"(?<=abc)123"); var match = regex.Match("xyzabc12", PcreMatchOptions.PartialSoft); // result: match.IsPartialMatch == true