如何匹配除第一次出现以外的文字中的字符?
例如:
98C546CC456C67应匹配98C546 CC 456 C 67
答案 0 :(得分:1)
此问题是此问题中向"regex-match a pattern, excluding..."
解释的技术的典型案例我们可以通过一个非常简单的正则表达式解决它:
^[^C]*C|(C)
交替|
的左侧匹配字符串的开头直到第一个C
。我们会忽略这场比赛。右侧匹配并捕获C
到组1,我们知道它们是正确的,因为它们与左侧的表达式不匹配。
此程序显示了如何使用正则表达式(请参阅online demo底部的结果):
var subject = '98C546CC456C67';
var regex = /^[^C]*C|(C)/g;
var group1Caps = [];
var match = regex.exec(subject);
// put Group 1 captures in an array
while (match != null) {
if( match[1] != null ) group1Caps.push(match[1]);
match = regex.exec(subject);
}
document.write("<br>*** Matches ***<br>");
if (group1Caps.length > 0) {
for (key in group1Caps) document.write(group1Caps[key],"<br>");
}
参考
答案 1 :(得分:1)
不幸的是,JavaScript的正则表达式引擎受到严重限制。你不能在一个正则表达式中这样做。最好的解决方案可能就是
txt = subject.match(/[A-Z]/ig); // or /[A-Z]+/ig, if CC should be a single match
并弃掉第一场比赛。
答案 2 :(得分:0)
例如,在像.NET Regex这样支持量词的量词中你可以使用lookbehind来寻找前面的字符
foreach(Match m in Regex.Matches("98C546CC456C67", @"(?<=C.*?)C")){
Console.WriteLine(m.ToString() + " at position " + m.Index);
}