如何将PCRE转换为POSIX RE?

时间:2010-05-14 21:18:59

标签: regex posix

这个有趣的问题Regex to match anything (including the empty string) except a specific given string涉及如何在MySQL中做出否定的预测。海报想要获得

的效果

Kansas(?! State)

因为MySQL没有实现预见断言,所以提出了许多答案

Kansas($|[^ ]| ($|[^S])| S($|[^t])| St($|[^a])| Sta($|[^t])| Stat($|[^e]))

海报指出,这是一个PITA,可能会有很多表达方式。

是否有PCRE(或其他软件包)的脚本/实用程序/模式将PCRE(如果可能)转换为不使用Perl时髦功能的等效正则表达式?我完全清楚一些Perl风格的正则表达式不能说是一个普通的正则表达式,所以当然我不希望这个工具做不可能的事情!

1 个答案:

答案 0 :(得分:2)

你不想这样做。将高级功能转换为基本功能实际上并不令人难以置信 - 它只是编译器的另一种风格,编译器编写者是相当聪明的人 - 但是时髦的功能解决的大多数事情是(a)无法用标准正则表达式,因为它们识别非常规语言,因此您必须对它们进行近似,以便至少它们适用于有限长度的文本或(b)可能,但只能使用指数大小的正则表达式。并且“指数”是指“不要去那里”。如果您尝试对实际想要处理的任何事物使用指数解决方案, 淹没在OutOfMemory错误和看似无限循环中。

换句话说,放弃进入这里的所有希望都放弃了。让正则表达式做其擅长的事情并使用其他工具完成其余工作几乎总是更好。使用原始正则表达式与否定运算符相比,即使反转正则表达式这样简单的事情也会比使用精确的正则表达式逆变器产生的怪物更容易解决。