如果我有一个看起来像“TEST(10,20,30)”的字符串,我怎么能从这个字符串中取出 10 个。
我试过了
/\(([^\)]+)\)/
这得到了括号的内部,但是当我尝试添加逗号时,例如
/\(([^\),]+)\)/
然后没有匹配项。
在这种情况下,您要捡起的部分的图案要比您要扔掉的部分的图案简单得多。
"TEST(10,20,30)"[/\d+/] # => 10
那是因为您也需要告诉正则表达式匹配逗号和右括号之间的内容(或将其省略):
/\(([^),]+)/
或者
/\(([^),]+)[^)]*\)/
如您所见,您也不需要在字符类中转义括号。
希望这可以指导您朝着正确的方向前进:
irb(main):001:0> str = "TEST(10,20,30)"
=> "TEST(10,20,30)"
irb(main):002:0> str =~ /\w+\(([^,]+),.+\)/
=> 0
irb(main):003:0> $~[1]
=> "10"
正则表达式这样做:
\w+
一个或多个单词字符(“TEST”)
(([^,]+)
任何非逗号的组,这将匹配从左括号到逗号的所有内容。
正则表达式的其余部分忽略其他参数,但可以对其进行修改以将它们包含在单独的组中。