在 Ruby 中,如果包含字符串中存在所需的字符串,那么什么正则表达式会删除除所需字符串之外的所有字符串?我知道/[^abc]/
字符,但是字符串呢?
假设我有字符串"group=4&type_ids[]=2&type_ids[]=7&saved=1"
并且想要保留模式group=\d
,如果它仅使用正则表达式存在于字符串中?
目前,我正在拆分&
,然后=~ /group=\d/
对生成的可枚举集合进行匹配条件的选择。它工作正常,但我想知道正则表达式更直接地做到这一点。
在 Ruby 中,如果包含字符串中存在所需的字符串,那么什么正则表达式会删除除所需字符串之外的所有字符串?我知道/[^abc]/
字符,但是字符串呢?
假设我有字符串"group=4&type_ids[]=2&type_ids[]=7&saved=1"
并且想要保留模式group=\d
,如果它仅使用正则表达式存在于字符串中?
目前,我正在拆分&
,然后=~ /group=\d/
对生成的可枚举集合进行匹配条件的选择。它工作正常,但我想知道正则表达式更直接地做到这一点。
简单地:
part = str[/group=\d+/]
如果你只想要数字,那么:
group_str = str[/group=(\d+)/,1]
如果您只想将数字作为整数,则:
group_num = str[/group=(\d+)/,1].to_i
警告:如果没有匹配String#[]
将返回nil
,并且盲目调用nil.to_i
总是返回0
。
你可以试试:
$str =~ s/.*(group=\d+).*/\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"
尝试:
str.match(/group=\d+/)[0]