正则表达式-左右字符数相等

时间:2019-03-18 13:18:35

标签: c# regex

所以我有这个正则表达式

[a+][a-z-[a]]{1}[a+]

将与字符串"aadaa"

匹配

但它也将匹配字符串"aaaaaaaadaa"

有没有办法强迫它只匹配左侧a和右侧a的出现次数应该相同的那些字符串?

,以便仅匹配"aadaa"而不匹配此"aaaaaaaadaa"

修改

借助彼得的回答,我可以使其正常运行,这是我需要的工作版本

(a+)[a-z-[a]]{1}\1

2 个答案:

答案 0 :(得分:5)

您可以使用back reference,如下所示:

console.log(check("ada"));
console.log(check("aadaa"));
console.log(check("aaaaaaaadaa"));
console.log(check("aaadaaaaaaa"));

function check(str) {
  var re = /^(.*).\1$/;
  return re.test(str);
}

或者仅匹配ad

console.log(check("aca"));
console.log(check("aadaa"));
console.log(check("aaaaaaaadaa"));
console.log(check("aaadaaaaaaa"));

function check(str) {
  var re = /^(a*)d\1$/;
  return re.test(str);
}

或者仅匹配{-{1}}以外的a

a


我意识到以上所有内容都是 javascript ,对于在SO上下文中进行快速演示很容易。

我使用以下与以上所有代码相似的C#代码制作了DotNetFiddle,可以正常工作:

console.log(check("aca"));
console.log(check("aadaa"));
console.log(check("aaaaaaaadaa"));
console.log(check("aaadaaaaaaa"));

function check(str) {
  var re = /^(a*)[b-z]\1$/;
  return re.test(str);
}

答案 1 :(得分:0)

您也可以使用以下正则表达式,尽管我希望使用@PeterB建议的正则表达式

console.log(check("aca"));
console.log(check("aadaa"));
console.log(check("aaaaaaaadaa"));
console.log(check("aaadaaaaaaa"));

function check(str) {
  var re = /^(\w+)[A-Za-z]\1$/;
  return re.test(str);
}

该代码与Peter B的答案中的代码相似,但正则表达式是我更改的代码。