在Ruby中,如果包含字符串中存在,正则表达式将除去所有字符串以外的所有字符串?我知道/[^abc]/
字符,但字符串怎么样?
假设我有字符串"group=4&type_ids[]=2&type_ids[]=7&saved=1"
并且想要保留模式group=\d
,如果它只使用正则表达式存在于字符串中?
目前,我正在分割&
,然后对生成的可枚举集合执行匹配条件=~ /group=\d/
的选择。它工作正常,但我想知道正则表达式更直接地做到这一点。
答案 0 :(得分: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
。
答案 1 :(得分:1)
您可以尝试:
$str =~ s/.*(group=\d+).*/\1/;
答案 2 :(得分: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"
答案 3 :(得分:0)
尝试:
str.match(/group=\d+/)[0]