我有一个字符串,其中包含类似$( "h1" ).focus(function() {
alert( "Handler for .focus() called." );
});
的内容
。表达式必须返回数字位数,并按第一个数字过滤。结果,我想查看:number: -7-972/516/57.15
。我写了这个表达式79725165715
,但是那个表达式遇到了问题“灾难性的回溯”(执行时冻结),带有长字符串,例如:^(\D*)+7+(\D*(?:\d\D*){10})$
答案 0 :(得分:0)
我写了一个新的,并且有效:\D*7(\d\D*){10}
答案 1 :(得分:0)
您只需要使用\d
。使用Matches
将为您提供所考虑行中所有匹配的模式。其中Count
可以为您提供比赛次数。为了将它们连成字符串,我创建了一个小的扩展方法。
为了测试您的正则表达式,我可以建议regexlib。
namespace CSharpTest
{
using System.Text;
using System.Text.RegularExpressions;
public static class Program
{
static void Main(string[] args)
{
string input = @"number: -7-972/516/57.15";
var regex = new Regex(@"\d");
var matches = regex.Matches(input);
var countOfNumbers = matches.Count;
var number = matches.ToNumber();
}
public static string ToNumber(this MatchCollection matches)
{
var result = new StringBuilder();
foreach (Match match in matches)
result.Append(match.Value);
return result.ToString();
}
}
}