排除正则表达式匹配输出的某些部分?

时间:2014-06-16 14:21:29

标签: ruby regex

我有字符串:

str1 = "(name)"
str2 = "name"

我错误的正则表达式:

output1 = /^name[[:alpha:]]{1,50}/.match(str1)
output2 = /^name[[:alpha:]]{1,50}/.match(str2)

输出:

output1: nil
output2: #<MatchData "name">

我需要一个正则表达式,它将产生&#34; output2&#34;两个字符串的输出。它应该期望多个或零非alpha字符,并期望在字符串的开头。

2 个答案:

答案 0 :(得分:0)

您的正则表达式不会考虑开头的任何非字母字符。尝试这样的事情:

^\W*name\W*

答案 1 :(得分:0)

如果您只想捕获字符串开头的第一个单词:

%w[(name) name].each do |s|
  puts s[/^[^a-z]*([a-z]+)/i, 1]
end
# >> name
# >> name

将捕获通常的ASCII字符。

http://rubular.com/r/104ylEQg2l

s[/^\W*([a-z]+)/i, 1]是Ruby的简写,用于在字符串中查找子字符串或模式。有关详细信息,请参阅String.[]

使用POSIX [:alpha:]字符集捕获UNICODE字符:

%w[(name) name].each do |s|
  puts s[/^[^[:alpha:]]*([[:alpha:]]+)/, 1]
end
# >> name
# >> name