Regex 正则表达式,如果有什么东西,确保它不是什么东西

Regex 正则表达式,如果有什么东西,确保它不是什么东西,regex,Regex,对于这个模糊的标题,我很抱歉,我必须经常这样做,我直接避免使用正则表达式,最后我将它包装起来,我现在认为它太常见了,以至于没有被提及 反斜杠逃跑!我正在将%%和结束%%之间的文本替换为某些内容,但我希望能够写入%% 我想说的是,如果%%之前有内容,请确保它不是a\,例如: [^\]%%不起作用,因为它无法在字符串开头获取内容 [^\]?%%不起作用,因为如果它是反斜杠,则它是可选的 我写这篇文章的时候有个想法 /?:?:?:\\{2}+\[^\\]%.*%.%/注意\\是正则表达式中的反斜杠 将

对于这个模糊的标题,我很抱歉,我必须经常这样做,我直接避免使用正则表达式,最后我将它包装起来,我现在认为它太常见了,以至于没有被提及

反斜杠逃跑!我正在将%%和结束%%之间的文本替换为某些内容,但我希望能够写入%%

我想说的是,如果%%之前有内容,请确保它不是a\,例如:

[^\]%%不起作用,因为它无法在字符串开头获取内容

[^\]?%%不起作用,因为如果它是反斜杠,则它是可选的

我写这篇文章的时候有个想法

/?:?:?:\\{2}+\[^\\]%.*%.%/注意\\是正则表达式中的反斜杠

将其理解为反斜杠的非零偶数,或不是后跟%%..的反斜杠

如果不进行测试,您会发现这不起作用,因为给定\\\%%stuff%%,正则表达式引擎将在第一个\之后看到\\%%stuff%%,这是一个偶数

所以

/?:?:[^\\\\]?:\\\\{2}+\\[^\\\\]%.*%/似乎是下一步,这是这样说的

不是后跟偶数个反斜杠的反斜杠,也不是后跟%%的反斜杠

哪一个更近!现在我们有了字符串开始的问题,我们还可以考虑正则表达式以获得:

/?:[^\\\]?:\\\{2}*%.*%.*%/这不是一个反斜杠,后跟任何偶数个反斜杠,后跟%。。。。这简直太棒了


然后我发现了一些魔力,因为这是如此接近,正如我所说,我不敢相信这还没有实现,请参见答案。

正如您可能知道的,至少在PERL正则表达式中,^表示在类中找不到字符串时的开始,$表示结束。这些规则很好,因为它们意味着^a之类的规则匹配字符串或有时以a开头的行,而不是它在任何地方找到的第一个a

我突然想到,将字符串的开头作为输入并基于它转换状态并没有技术上的困难!正则表达式被编译成确定性有限自动机状态机!所以我想我应该用一个^来测试它,所以现在它不是反斜杠后跟偶数个反斜杠,也不是字符串开头后跟%%

/?:?:[^\\\]?:\\\{2}+\[^\\\]\\\\\\\\\\%.*%/可以通过识别0反斜杠的大小写为,并且0是偶数

?:?:[^\\\]?:\\\{2}*^%%.*%/

希望这对某人有帮助

你可以在任何地方使用^

真不敢相信我总是回避解决这个问题