我试图匹配那些不以" CD"开头的行。或任何2位数字。我试过了:
^[^Cc0-9][^Dd0-9].+?$
但它与以" Cx"开头的行不匹配或" 0y"。
我使用名为rxrepl的程序,上面的正则表达式作为搜索字符串,没有任何替代品。我试图避免使用grep。此外,我不能使用括号,因为在rxrepl中它们用于捕获组。
答案 0 :(得分:3)
正如其他人所说,你需要
function pushUniqueSinglePass(array, unique) {
var prev; // last element seen
var run = 0; // number of times it has been seen
for (var i = 0; i < array.length; i++) {
if (array[i] != prev) {
if (run == 1) {
unique.push(prev); // "prev" appears only once
}
prev = array[i];
run = 1;
} else {
run++;
}
}
}
function pushUniqueWithSet(array, unique) {
var set = new Set();
for (var i = 0; i < array.length; i++) {
set.add(array[i]);
}
for (let e of set) {
unique.push(set);
}
}
// Utility and test functions
function randomSortedArray(n, max) {
var array = [];
for (var i = 0; i < n; i++) {
array.push(Math.floor(max * Math.random()));
}
return array.sort();
}
function runtest(i) {
var array = randomSortedArray(i, i / 2);
var r1 = [],
r2 = [];
console.log("Size: " + i);
console.log("Single-pass: " + time(
pushUniqueSinglePass, array, r1));
console.log("With set: " + time(
pushUniqueWithSet, array, r2));
// missing - assert r1 == r2
}
[10, 100, 1000, 10000,
100000, 1000000
].forEach(runtest);
function time(fun, array, unique) {
var start = new Date().getTime();
fun(array, unique);
return new Date().getTime() - start;
}
^(?:CD|\d\d)
是非捕获组
或者,如果必须避免使用任何类型的括号,请使用
(?: ... )
为了符合您的新规范“我实际上是在尝试匹配 以CD或2位数字开头
^CD|^\d\d
你需要用括号来克服你的问题。否定前瞻是fine in PCRE而无法捕获
答案 1 :(得分:2)
是CD
或两个数字。所以你必须使用这样的组(group1|group2)
:
^(CD|[0-9]{2})
# ^^ ^^^^^^^^
# | |
# either CD |
# or two digits