我们说我有类似的东西:
{values="99999" name="22222" store="11111"}
使用:
.match(/values="\d+/)
将返回:
values="99999
我怎样才能得到" 99999"出来的?
我已经尝试了
.match(/values="(\d+)/)
应该只返回我认为的数字,但它不会。
希望有人可以提供帮助!
干杯,
答案 0 :(得分:3)
试试这个正则表达式,
.match(/values="(\d+)"/)
仅对values=
之后的数字,您可以使用后视和前瞻
.match(/(?<=values=")(\d+)(?=")/)
<强>解释强>
(?<=values=")
这里使用了Look-behind。它将匹配标记设置在字符串values="
(\d+)
在正则表达式()
中称为捕获组。它捕获一个或多个数字。(?=")
Lookahead用于检查数字后面的后续字符是否为双引号。如果它是双引号,则只匹配前面的数字。答案 1 :(得分:3)
\K
这样做:
if subject =~ /values="\K\d+/
match = $&
values="
匹配文字字符\K
告诉引擎放弃到目前为止与其返回的最终匹配项匹配的内容\d+
与您的数字匹配答案 2 :(得分:2)
如果使用.captures方法并查看返回值, 你会找到你需要的东西。
#!/usr/bin/env ruby
string = '{values="99999" name="22222" store="11111"}'
one = string.match(/values="(\d+)/).captures
p one => ["99999"]
答案 3 :(得分:0)
根据每个人的回答,我还建议添加.to_a.shift
,如果找到则会返回找到的值,如果没有则会nil
。例如:
.match(/(?<=values=")(\d+)(?=")/).to_a.shift
.match(/values="\K(\d+)/).to_a.shift
执行rescue nil
也可能适用,但它有点hacky或不太安全。