我编写了此正则表达式以匹配HTML页面中的所有hrefsrc链接; (我知道我应该使用解析器;这只是实验):
/((href|src)\=\").*?\"/Without look-behind

它工作正常,但是当我尝试将表达式的第一部分修改为后向模式时:
/(?<=(href|src)\=\").*?\"/With look-behind

它引发错误,指出“无效的后向模式”。有什么想法,后面有什么问题吗?

最佳答案

后面有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=").*?"/

关于ruby - 后向正则表达式问题(Ruby),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19947331/

10-10 16:23