大家好我需要找一个正则表达式,它只接受两组11的字符串 从一组{0,1,2}
0011110000 match it only has two sets
0010001001100 does not match (only has one set)
0000011000110011 does not match (it has three sets)
00 does not match (it has no set
0001100000110001 match it only has two sets
这是我到目前为止所做的事情
([^1]|1(0|2|3)(0|2|3)*)*11([^1]|1(0|2|3)(0|2|3)*)*11([^1]|1(0|2|3)(0|2|3)*|1$)*
--------------------------
我认为我缺少的是我需要确保上面正则表达式的下划线部分必须确保字符串中没有剩余的“11”,我不认为该部分是工作正常。
答案 0 :(得分:3)
如果这不是作业,那么我建议避免使用正则表达式并使用常规函数(这里显示的是JavaScript):
function hasTwoElevensOnly(s) {
var first = s.indexOf("11");
if (first < 0) return false;
var second = s.indexOf("11", first + 2);
if (second < 0) return false;
return s.indexOf("11", second + 2) < 0;
}
此处代码:http://jsfiddle.net/8FMRH/
function hasTwoElevensOnly(s) {
return /^((0|1(?!1)|2)*?11(0|1(?!1)|2)*?){2}$/.test(s);
}
如果需要正则表达式,
答案 1 :(得分:3)
你可以使用正则表达式,但是你可以使用更简单的选项。这是C#中的一个例子:
public bool IsValidString(string input)
{
return input.Split(new string[] { "11" }, StringSplitOptions.None).Length == 3;
}
虽然正则表达式可能是一个非常有用的工具,但并不总是保证它们的使用。正如jwz put it:
有些人在面对问题时会想“我知道,我会使用正则表达式”。现在他们有两个问题。
答案 2 :(得分:1)
大多数正则表达式都有外观限制,通常在{}
。例如,在JavaScript中,您可以执行以下操作:
/^((10|0)*11(01|0)*){2}$/
在字符串中以2 11
为前缀,后缀为0 + 0
。
答案 3 :(得分:0)
可能有一种更简单的方法,但从您的方法开始,这似乎适用于所提供的样本数据:
/^([^1]|1[023])*11([^1]|1[023])*11((?<!11)|1[023]|[023]|(?<=[023])1)*$/
使用lookbehind。