我是HTTP和Regex的新手。我有一段代码,我已经移植到Delphi部分工作。在特定声明中引发了“ lookbehind not of fixed length ”的异常:
'(?<=image\\?c=)[^\"]+'
声明用于从html表单中提取图像链接。在这里和网上进行了一些研究之后,我逐渐明白最终的' + '会导致Regex的某些实现。我找不到的是如何将其更改为在Delphi的实现中工作。由于代码在C#中有效,有人可以帮忙解释一下吗?
答案 0 :(得分:4)
lookbehind部分没有固定的长度。这与最后的+
无关。 lookbehind部分是(?<=image\\?c=)
。你从C#复制了它。在C#中,正则表达式想要查找文字问号。这是正则表达式中的一个特殊字符,所以它需要在它前面加一个反斜杠。反斜杠在C#字符串中是特殊的,因此反斜杠需要另一个反斜杠,所有这些只是代表一个问号。
在Delphi字符串中,反斜杠并不特殊,因此将它们中的两个视为要在正则表达式中搜索的文字反斜杠。问号没有被转义,因此Delphi正则表达式将其视为使文字反斜杠可选的指令。可选字符使lookbehind具有可变长度。
要解决此问题,只需删除一个反斜杠。
您也可以删除引号前的那个,但它应该没有效果,因为引号在正则表达式中并不特殊。
即使您使用HTML解析器来识别包含此URL片段的HTML元素,您仍可能需要正确的正则表达式来识别您的目标HTML元素。