[英]C# / .NET equivalent for Java Matcher.find and Matcher.group
[英]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替代方法(在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.