1

在 Ruby 中,如果包含字符串中存在所需的字符串,那么什么正则表达式会删除除所需字符串之外的所有字符串?我知道/[^abc]/字符,但是字符串呢?

假设我有字符串"group=4&type_ids[]=2&type_ids[]=7&saved=1"并且想要保留模式group=\d,如果它仅使用正则表达式存在于字符串中?

目前,我正在拆分&,然后=~ /group=\d/对生成的可枚举集合进行匹配条件的选择。它工作正常,但我想知道正则表达式更直接地做到这一点。

4

4 回答 4

2

简单地:
part = str[/group=\d+/]

如果你只想要数字,那么:
group_str = str[/group=(\d+)/,1]

如果您只想将数字作为整数,则:
group_num = str[/group=(\d+)/,1].to_i

警告:如果没有匹配String#[]将返回nil,并且盲目调用nil.to_i总是返回0

于 2011-02-01T15:23:21.687 回答
1

你可以试试:

$str =~ s/.*(group=\d+).*/\1/;
于 2011-02-01T07:05:29.193 回答
1

通常我不会太担心复杂的正则表达式。只需将字符串分解成更小的部分,它就会变得更容易:

asdf = "group=4&type_ids[]=2&type_ids[]=7&saved=1"

asdf.split('&').select{ |q| q['group'] } # => ["group=4"]

否则,您可以通过多种不同的方式使用正则表达式。以下是我倾向于使用的两种方法:

asdf.scan(/group=\d+/) # => ["group=4"]
asdf[/(group=\d+)/, 1] # => "group=4"
于 2011-02-01T07:06:06.537 回答
0

尝试:

str.match(/group=\d+/)[0]
于 2011-02-01T07:34:47.000 回答