如何使用正则表达式提前查找并匹配先前的字符串/字符类

时间:2018-09-23 19:38:40

标签: javascript regex

如果数字不在 //Opening the text file from the path given char * dataset; int dataLength; ifstream in(path); if (!in) { cout << "Could not open the file." << endl; exit(-1); } //Calculating the number of characters in the file in.ignore(numeric_limits<streamsize>::max()); dataLength = in.gcount(); //Clearing since EOF bit is set after ignore method above in.clear(); in.seekg(0, ifstream::beg); //Initializing the dataset array and copying the data dataset = new T[dataLength + 1]; in.read(dataset, dataLength); dataset[dataLength] = '\0'; 之前,则尝试使用否定的前瞻匹配数字。

%
\d+(?!%)
//匹配898,但不匹配9%。
我希望它与整体8989相匹配。

在匹配整个字符类或更复杂的正则表达式时,是否还可以使用否定的前瞻性?
8989%
[\d.+](?!%)
它将匹配\d+(\.\d{1,2})?(?!%)

之前的小数

1 个答案:

答案 0 :(得分:3)

\d+(?!%)模式匹配一​​个或多个数字,并首先在8989中抢占8989%,但是(?!%)否定超前匹配失败,引擎看到+量词开始回溯。它会从匹配缓冲区中丢弃最后一个9,并重试(?!%)前瞻,因为在898之后没有%符号,因此成功了。

您可以使用

/\d+(?![\d%])/g

请参见regex demo

如果1+个数字后跟任意数字或(?![\d%]),则%否定超前匹配将失败,因此不会返回1个数字后跟{{ 1}}符号。