使用Look-behind正则表达式(Ruby)的问题

时间:2013-11-13 06:56:37

标签: ruby regex lookbehind

我写了这个正则表达式来匹配HTML页面中的所有hrefsrc链接; (我知道我应该使用解析器;这只是试验):

/((href|src)\=\").*?\"/Without look-behind

它工作正常,但是当我尝试将表达式的第一部分修改为后视模式时:

/(?<=(href|src)\=\").*?\"/With look-behind

它会抛出错误,指出“无效的后视模式”。任何想法,看起来有什么问题?

1 个答案:

答案 0 :(得分:11)

Lookbehind有restrictions

   (?<=subexp)        look-behind
   (?<!subexp)        negative look-behind

                      Subexp of look-behind must be fixed character length.
                      But different character length is allowed in top level
                      alternatives only.
                      ex. (?<=a|bc) is OK. (?<=aaa(?:b|cd)) is not allowed.

                      In negative-look-behind, captured group isn't allowed, 
                      but shy group(?:) is allowed.

你不能将替代品放在非负顶级(负面)后面。

将它们放在顶层。你也不需要逃避你做过的一些角色。

/(?<=href="|src=").*?"/