ruby - 后视正则表达式 (Ruby) 的问题

标签 ruby regex lookbehind

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

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

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

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

它抛出一个错误,指出“无效的后视模式”。有什么想法吗,回溯有什么问题吗?

最佳答案

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

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

相关文章:

ruby - Ruby 中的正则表达式负后视似乎不起作用

ruby-on-rails - Rails 文件字段被解释为字符串?

ruby-on-rails - 使用 Ruby 在 ftp 站点上移动和重命名文件

java - 正则表达式捕获单行注释

regex - 正则表达式、先行和后行的命名约定

regex - Vim 语法区域 - 回顾困惑

arrays - 如何在 Ruby 中有效地连接多个数组?

mysql - Datamapper 独特约束和偏执删除

regex - Kibana 中的正则表达式问题

ruby - 正则表达式匹配人类可读的数字