如何获取字符串foo[]=1&foo[]=5&foo[]=2
并按顺序返回值为1,5,2
的集合。我在C#中使用正则表达式寻找答案。谢谢
在C#中,您可以使用捕获组
private void RegexTest()
{
String input = "foo[]=1&foo[]=5&foo[]=2";
String pattern = @"foo\[\]=(\d+)";
Regex regex = new Regex(pattern);
foreach (Match match in regex.Matches(input))
{
Console.Out.WriteLine(match.Groups[1]);
}
}
我不知道C#,但......
在java中:
String[] nums = String.split(yourString, "&?foo[]");
String.split()
方法中的第二个参数是一个正则表达式,告诉方法在哪里拆分String。
我会用这个特殊的模式:
string re = @"foo\[\]=(?<value>\d+)";
所以像(未经测试):
Regex reValues = new Regex(re,RegexOptions.Compiled);
List<integer> values = new List<integer>();
foreach (Match m in reValues.Matches(...putInputStringHere...)
{
values.Add((int) m.Groups("value").Value);
}
使用Regex.Split()方法和适当的正则表达式。这将拆分与正则表达式匹配的字符串部分,并将结果作为字符串[]返回。
假设您想要查询字符串中的所有值而不检查它们是否为数字(并且不仅仅匹配foo []等名称),您可以使用:“&?[^&=] + =”
string[] values = Regex.Split(“foo[]=1&foo[]=5&foo[]=2”, "&?[^&=]+=");
顺便说一句,如果你正在玩正则表达式网站http://gskinner.com/RegExr/太棒了(我只是一个粉丝)。
假设您正在处理数字,此模式应匹配:
/=(\d+)&?/
这应该做:
using System.Text.RegularExpressions;
Regex.Replace(s, !@"^[0-9]*$”, "");
其中s是您想要提取数字的String。
只要确保像这样逃避&符号:
/=(\d+)\&/
这是使用内置string.Split函数的替代解决方案:
string x = "foo[]=1&foo[]=5&foo[]=2";
string[] separator = new string[2] { "foo[]=", "&" };
string[] vals = x.Split(separator, StringSplitOptions.RemoveEmptyEntries);