首页 > 解决方案 > 正则表达式匹配 rubular 但不是 Ruby

问题描述

我正在尝试"A1RKKUPIHCS9HS"从字符串返回cheese

cheese = "#<struct Peddler::Marketplace id=\"A1RKKUPIHCS9HS\",..."

我都试过了scanmatch就像这样:

cheese.match(/(?<=id=\\").{14}/)
cheese.scan(/(?<=id=\\")./)

它适用于Rubular,但是当我在 Ruby 中尝试它时,它不起作用。不知道为什么。

标签: regexruby

解决方案


在 Rubular 输入以下内容作为测试字符串:

#<struct Peddler::Marketplace id="A1RKKUPIHCS9HS",...

也就是说,不要将字符串放在双引号中或在字符串中转义双引号。Rubular 会解决这个问题,就像它用两个正斜杠围绕您的正则表达式一样。

你希望你的正则表达式是/(?<=id=").{14}/. /(?<=id=\").{14}/这与不需要转义双引号相同,但转义它会使其保持不变,因此不会造成任何伤害。Ruby 将带有正则表达式的双(和单)引号视为没有特殊含义的普通字符。


推荐阅读