Ruby正则表达式`/^/`
这是我的代码:Ruby正则表达式`/^/`,ruby,regex,Ruby,Regex,这是我的代码: ['banana', 'anana', 'naan'].map do |food| food.reverse end.select { |f| f.match /^a/ } # => ["ananab", "anana"] 我想知道这个正则表达式是否用于查找包含不同于“a”(否定)字符的单词,或者正则表达式是否匹配以“a”开头的单词(ananab和anana) 谁能再帮我一点忙吗 正则表达式/^a/的意思是:“匹配第一个字符为a的任何字符串”。此处的^字符表示字符串
['banana', 'anana', 'naan'].map do |food|
food.reverse
end.select { |f| f.match /^a/ }
# => ["ananab", "anana"]
我想知道这个正则表达式是否用于查找包含不同于“a”
(否定)字符的单词,或者正则表达式是否匹配以“a”
开头的单词(ananab
和anana
)
谁能再帮我一点忙吗 正则表达式
/^a/
的意思是:“匹配第一个字符为a
的任何字符串”。此处的^
字符表示字符串的开头
我相信您要查找的是/[^a]/
,这意味着:“匹配任何包含非a
字符的字符串”。[^…]
语法将匹配大括号内的字符以外的任何字符
要真正得到您想要的内容,请在末尾抛出一个*
,/^[^a]*$/
,意思是:“匹配从开始(^
)到结束($
)的所有字符都不是a
)的任何字符串
附录:根据评论,我写“字符串”的地方实际上是指“字符串或行”“。
^
和$
字符是锚定符,将正则表达式固定到行的开头或结尾。或者,对于没有任何换行符的字符串,它将锚定到字符串的开头或结尾。如果您认为^
表示否定,则只有当它是表示字符组的[]
中的第一个字符时,才是否定。即使您有一个否定[^a]
,也不意味着字符串没有字符a
。它表示具有除a
以外的字符的字符串
正则表达式是一种尝试匹配某些内容的工具。在它的实现中,它将通过更改匹配位置、回溯等方式尝试以任何可能的方式匹配模式。如果要查看字符串是否与模式不匹配,最直接的方法是对谓词使用否定,而不是对正则表达式使用否定。当字符串s
不包含a
时,以下将返回true:
s !~ /a/
但在这种简单的情况下,您可以:
!s.include?("a")
或者,您可以使用拒绝
,而不是选择
:
reject{|s| s.include?("a")}
请尝试以下方法:
['banana', 'anana', 'naan'].map(&:reverse).select { |f| !f.include?("a") }
代码执行以下操作:反转数组中的字符串并过滤包含字符“a”的所有字符串。不清楚您的问题是什么。您是否在询问您发布的代码的作用,或者如何从包含字母“a”的数组中排除项 您发布的代码:
['banana', 'anana', 'naan'].map do |food|
food.reverse
end.select { |f| f.match /^a/ }
是否有下列情况:
首先,它创建一个新数组,每个元素都被反转(假设每个元素都是字符串)
所以
应生成如下数组:
["ananab", "anana", "naan"]
这是因为map获取数组中的每个元素并将其注入到块中
do |food|
food.reverse
end
如果每个元素都已“映射”到反转的字符串,则在每个元素上反转字符串并创建一个新数组
然后
.select { |f| f.match /^a/ }
零件将从[“ananab”、“anana”、“naan”]创建另一个数组
包含以字母a开头的每个元素(/^a/表示以“a”开头)
导致数组
["ananab", "anana"]
如果你的问题是如何排除包含字母a的单词,那么
['banana', 'anana', 'naan'].reject { |s| s.include?("a") }
应该做你想做的事(正如sawa指出的)
^
实际上意味着行的开始,而不是字符串的开始<代码>\A表示字符串的开头。类似地,$
是行的结尾,而\z
是字符串的结尾。对于后代来说,它实际上意味着行的开头或字符串的开头。所以,我们在技术上都是错的,尽管可以说,我错的更多。(但为了简单起见,这实际上是一个有意的选择。可能是被误导了。)@ceykooo但这仅仅是因为字符串的开头必须始终也是行的开头。我有点不同意。但这是一个哲学上的分歧。对于一根弦的末端来说更为模糊:弦的末端真的是一行的末端,还是根本就没有一行?我必须咨询我的精神委员会。@ceykooo正如AndrewMarchall所指出的,你对“我们在技术上都是错的”的描述是错误的。穆太短并没有错。只有你错了。如果你只是想排除那些带有字母“a”的字符串,为什么要反转这些字符串呢?我只重构了OP的代码。我只是信使。
['banana', 'anana', 'naan'].reject { |s| s.include?("a") }